Java循环在arraylist中查找对象无法超过index[0]

标签 java

我遇到了一个问题,我必须在 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!
}

最佳答案

根据我对你问题的理解,

您正在尝试添加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像那样。请参阅文档以了解如何使用它们。

关于Java循环在arraylist中查找对象无法超过index[0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36319833/

相关文章:

Java Swing 字体选择器

java - Math.cos、sin 和 tan 在 Java 中返回不准确的值

java - 在 linux 上导入 gradle 后没有项目模块

java - 在流口水中禁用严格模式

java - 尝试为 dao hibernate 运行 Junit 测试会出现以下错误

Java-当值存储在字符串列表中时,如何使用 Map 查找匹配的键

java - 如何用不同的方法从子类关闭 JFrame?

java - 我如何从 StreamTokenizer 回避 TT_NUMBER

java - 如何使用 Bouncy CaSTLe 生成对称 key ?

java - Android OnTouch MotionEvent Action