Searching in a ArrayList with custom objects for certain strings

JavaSearchArraylistCustom Object

Java Problem Overview


I have a ArrayList with custom objects. I want to search inside this ArrayList for Strings.

The class for the objects look like this:

public class Datapoint implements Serializable {
  
  private String stateBased;
  private String name;
  private String priority;
  private String mainNumber;
  private String groupadress;
  private String dptID;

  public Datapoint(){
  }

  public String getMainNumber() {
    return mainNumber;
  }

  public void setMainNumber(String mainNumber) {
    this.mainNumber = mainNumber;
  }

  public String getName() {
    return name;
  }
   
  ..and so on

I know how to search for a string in a ArrayList but how to do that in a ArrayList with my custom objects:

ArrayList<String> searchList = new ArrayList<String>();
String search = "a";
int searchListLength = searchList.size();
for (int i = 0; i < searchListLength; i++) {
if (searchList.get(i).contains(search)) {
//Do whatever you want here
}
}

So I want to have a function to search in my ArrayList with for example five objects for all "name" strings.

Java Solutions


Solution 1 - Java

The easy way is to make a for where you verify if the atrrtibute name of the custom object have the desired string

    for(Datapoint d : dataPointList){
        if(d.getName() != null && d.getName().contains(search))
           //something here
    }

I think this helps you.

Solution 2 - Java

UPDATE: Using Java 8 Syntax

List<DataPoint> myList = new ArrayList<>();
//Fill up myList with your Data Points

List<DataPoint> dataPointsCalledJohn = 
	myList
    .stream()
    .filter(p-> p.getName().equals(("john")))
    .collect(Collectors.toList());

If you don't mind using an external libaray - you can use Predicates from the Google Guava library as follows:

class DataPoint {
	String name;
	
	String getName() { return name; }
}

Predicate<DataPoint> nameEqualsTo(final String name) {
	return new Predicate<DataPoint>() {

		public boolean apply(DataPoint dataPoint) {
			return dataPoint.getName().equals(name);
		}
	};
}

public void main(String[] args) throws Exception {

	List<DataPoint> myList = new ArrayList<DataPoint>();
	//Fill up myList with your Data Points

    Collection<DataPoint> dataPointsCalledJohn =
    		Collections2.filter(myList, nameEqualsTo("john"));

}

Solution 3 - Java

try this

ArrayList<Datapoint > searchList = new ArrayList<Datapoint >();
String search = "a";
int searchListLength = searchList.size();
for (int i = 0; i < searchListLength; i++) {
if (searchList.get(i).getName().contains(search)) {
//Do whatever you want here
}
}

Solution 4 - Java

Probably something like:

ArrayList<DataPoint> myList = new ArrayList<DataPoint>();
//Fill up myList with your Data Points

//Traversal
for(DataPoint myPoint : myList) {
    if(myPoint.getName() != null && myPoint.getName().equals("Michael Hoffmann")) {
        //Process data do whatever you want
        System.out.println("Found it!");
     }
}

Solution 5 - Java

For a custom class to work properly in collections you'll have to implement/override the equals() methods of the class. For sorting also override compareTo().

See this article or google about how to implement those methods properly.

Solution 6 - Java

contains() method just calls equals() on ArrayList elements, so you can overload your class's equals() based on the name class variable. Return true from equals() if name is equal to the matching String. Hope this helps.

Solution 7 - Java

Use Apache CollectionUtils:

CollectionUtils.find(myList, new Predicate() {
   public boolean evaluate(Object o) {
      return name.equals(((MyClass) o).getName());
   }
}

Solution 8 - Java

String string;
for (Datapoint d : dataPointList) {    
   Field[] fields = d.getFields();
   for (Field f : fields) {
      String value = (String) g.get(d);
      if (value.equals(string)) {
         //Do your stuff
      }    
   }
}

Solution 9 - Java

boolean found;

for(CustomObject obj : ArrayOfCustObj) {

   if(obj.getName.equals("Android")) {

      found = true;
   }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMokkappsView Question on Stackoverflow
Solution 1 - JavaRenato LochettiView Answer on Stackoverflow
Solution 2 - JavamunyengmView Answer on Stackoverflow
Solution 3 - JavaG_SView Answer on Stackoverflow
Solution 4 - JavagtgaxiolaView Answer on Stackoverflow
Solution 5 - JavaRidcullyView Answer on Stackoverflow
Solution 6 - JavaEgorView Answer on Stackoverflow
Solution 7 - JavaMukeshKoshyMView Answer on Stackoverflow
Solution 8 - JavaArtem ZelinskiyView Answer on Stackoverflow
Solution 9 - JavaSayali ShindeView Answer on Stackoverflow