it-swarm.com.de

Suchen in einer ArrayList mit benutzerdefinierten Objekten nach bestimmten Zeichenfolgen

Ich habe eine ArrayList mit benutzerdefinierten Objekten. Ich möchte in dieser ArrayList nach Strings suchen.

Die Klasse für die Objekte sieht folgendermaßen aus:

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

Ich weiß, wie man in einer ArrayList nach einer Zeichenfolge sucht, aber wie man das in einer ArrayList mit meinen benutzerdefinierten Objekten macht:

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
}
}

Ich möchte also eine Funktion zum Suchen in meiner ArrayList mit beispielsweise fünf Objekten für alle "Namens" -Strings haben.

59
Mokkapps

Die einfache Möglichkeit besteht darin, ein for zu erstellen, in dem Sie überprüfen, ob das Attribut name des benutzerdefinierten Objekts die gewünschte Zeichenfolge enthält

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

Ich denke das hilft dir.

90
Renato Lochetti

UPDATE: Mit 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());

Wenn es Ihnen nichts ausmacht, einen externen Libaray zu verwenden, können Sie Prädikate aus der Google Guava-Bibliothek wie folgt verwenden:

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"));

}
39
munyengm

versuche dies

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
}
}
7
G_S

Damit eine benutzerdefinierte Klasse ordnungsgemäß in Auflistungen funktioniert, müssen Sie die equals() -Methoden der Klasse implementieren/überschreiben. Zum Sortieren auch compareTo() überschreiben.

Lesen Sie diesen Artikel oder google, wie Sie diese Methoden richtig implementieren.

5
Ridcully

Wahrscheinlich so etwas wie:

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!");
     }
}
4
gtgaxiola

Die Methode contains() ruft nur equals() für ArrayList Elemente auf, sodass Sie die equals() Ihrer Klasse basierend auf der Klassenvariablen name überladen können . Geben Sie true von equals() zurück, wenn name dem übereinstimmenden String entspricht. Hoffe das hilft.

2
Egor

Verwenden Apache CollectionUtils:

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

for(CustomObject obj : ArrayOfCustObj) {

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

      found = true;
   }
}
0
Sayali Shinde
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
      }    
   }
}
0
Greensy