2016-03-30 4 views
0

Ich habe ein Problem, ich muss eine for-Schleife einchecken, wenn ein Objekt bereits in der Arraylist existiert. Wenn das Objekt nicht existiert, muss ich eins erstellen/eins hinzufügen. Allerdings kann ich keine Möglichkeit finden, dies zu überprüfen, da er immer nur den ersten Index prüft und dann herunterfährt, oder er wird den ersten Index überprüfen und die Objekte werden nicht übereinstimmen, daher erstelle ich 3 doppelte Objekte, bevor die Schleife erkennt, dass es einen gibt dupliziere es zu spät. Hier ist der Code:Java-Schleife, um Objekt in Arraylist zu finden, kann nicht über Index [0]

Ich hoffe wirklich, Sie Jungs können mir helfen, kann einfach nicht die Lösung bekommen.

Klas klas = informatieSysteem.getKlasVanStudent(student);   // klascode van de student opzoeken 
    for (Les l : informatieSysteem.deLessen) { 
     if (l.getKlas().getKlasCode().contains(klas.getKlasCode()) && l.getStartTijdString().contains(begintijd) && l.getEindTijdString().contains(eindtijd) && l.getDateString().contains(datum) && l.getKlas().getStudentenKlas().contains(student)) { 
      System.out.println(l); 
      les = l; 
     } 
    } 
    if (student.getAbsentie().size() == 0) { 
     student.addabsentie(datum, begintijd, eindtijd, les, student); 
    } else { 
     for (int i = 0; i < student.getAbsentie().size(); i++) {//anders controle of dit object voorkomt in lijst. 
      Absentie ab = student.getAbsentie().get(i); 
      System.out.println(student.getAbsentie().size()); 
      if(student.getAbsentie().listIterator().next().getLes().equals(les)){ 
      //if ((ab.getLes().getDateString().equals(les.getDateString()))&& (ab.getLes().getStartTijdString().equals(les.getStartTijdString()))&&ab.getLes().getEindTijdString().equals(les.getEindTijdString())) { 
       System.out.println("niet else"); 
      }else{ 
       student.addabsentie(datum, begintijd, eindtijd, les, student); 
       break; 
      } 
     } 
    } 
    JsonArrayBuilder jab = Json.createArrayBuilder(); 
    for(Absentie ab: student.getAbsentie()) { 
           // Uiteindelijk gaat er een array... 
     jab.add(ab.getLes().getDateString()); 
    } 
    conversation.sendJSONMessage(jab.build().toString());      // terug naar de Polymer-GUI! 
} 
+1

Sie könnten ein 'Set' anstelle von' ArrayList' verwenden. Dann müssen Sie nicht prüfen, ob das Objekt existiert oder nicht, es wird niemals Duplikate geben. https://docs.oracle.com/javase/7/docs/api/java/util/Set.html – Atri

+0

Verwenden Sie 'für (Absentie ab: student.getAbsentie())' Ich bekomme nicht, was der ListIterator macht im Code. Es ist irgendwie schwer zu lesen. Vielleicht solltest du es zuerst umgestalten und aufräumen. –

+0

ist die Variable 'les' in' equals (les) 'gesetzt? Woher? –

Antwort

2

Von meinem Verständnis Ihrer Frage,

Sie versuchen Absentie Instanzen zu Ihrem ArrayList (in der Student Instanz) hinzuzufügen. Und um Duplikate zu vermeiden, versuchen Sie zu überprüfen, ob diese bestimmte Instanz bereits existiert.

ArrayList hat eine contains Methode für sie definiert, so dass es nicht notwendig ist, dass Sie es durchlaufen und überprüfen Sie es so. Die Methode contains ruft die im Objekt definierte Methode equals auf, um einem bestimmten Datensatz zu entsprechen. Also, Sie müssen nur sicherstellen, dass Sie override die equals Methode in der Absentie Klasse und vergleichen Sie mit einem Feld, das die Einschränkung erfüllen würde.

class Absentie{ 
     ... 
     @Override 
     public boolean equals(Absentie absentie){ 
      //Define your equality condition here 
     } 
    } 

Bei dem Versuch zu überprüfen, ob das Array bereits enthält.

Absentie absenties = student.getAbsentie(); 
    if(!absenties.contains(absentie){ 
     student.addAbsentie(absentie); 
    } 

Auch Sie sind nicht verwenden Iterators wie das soll. Bitte lesen Sie die Dokumentation, um zu verstehen, wie sie verwendet werden sollte.

+0

Oh ich war so dumm, ich weiß nicht, was ist los mit mir – Colivar

Verwandte Themen