Java循环查找arraylist中的对象无法通过索引[0]

时间:2016-03-30 21:11:35

标签: java

我遇到了一个问题,如果arraylist中已存在一个对象,我必须检查for循环。当对象不存在时,我必须创建一个/添加一个。但是我找不到检查这个的方法,因为他总是只检查第一个索引然后关闭,或者他将检查第一个索引和对象不匹配,因此我在循环实现之前创建了3个重复对象复制它太晚了。这是代码:

我真的希望你们能帮助我,但我无法得到解决方案。

    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 个答案:

答案 0 :(得分:2)

从我对你的问题的理解,

您正尝试将Absentie个实例添加到ArrayList(存在于Student实例中)。并且,为了避免重复,您正在尝试检查该特定实例是否已存在。

ArrayList为其定义了contains方法,因此您无需循环遍历并按此方式进行检查。 contains方法调用对象中定义的equals方法以匹配给定记录。因此,您只需确保在override类中equals Absentie方法,并与满足约束的字段进行比较。

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

尝试检查数组是否已包含时。

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

此外,您不应该像这样使用Iterators。请参阅文档以了解如何使用它们。