【发布时间】:2017-12-15 12:58:39
【问题描述】:
我已经弄清楚如何比较两个 ArrayList 并将重复项添加到新的 ArrayList 中。
ArrayList<Student> allStudentsA = assignStudents();
ArrayList<Student> allStudentsB = allStudentsA;
for (Student studentA : allStudentsA) {
for (Student studentB : allStudentsB) {
if (studentA.getId().equals(studentB.getId()) && studentA.getEduNumber() != studentB.getEduNumber()) {
duplicateStudents.add(studentB);
}
}
}
不管我怎么做,我每次都添加每个副本一次。由于“Rodaba”出现了 7 次,因为她有 7 个不同的优先级,因此她被添加到列表中 7*6 次。这是我打印出来的方式:
for (Student student : duplicateStudents) {
if (student.getFornavn().equals("Rodaba")) {
System.out.println("Name: " + student.getFornavn() + "\t \t" + "EduNumber: " + student.getOptagelsesområde() + "\t" + "Prio: " + student.getPrio());
}
}
有没有一种聪明的方法可以避免这种情况,并且只为她申请的每个优先级添加一次“Rodaba”? 这是我的输出,有没有办法只获取标记的部分?
我已经被这个问题困扰了很长时间。对于制作 ArrayList 的更好方法以及如何解决这个问题的建议,我真的很感激。
【问题讨论】:
-
我认为使用
Map可能是一个很好的解决方案。它还消除了嵌套的for循环。 -
为什么不检查学生是否已经在列表中?此外,它与此无关,但您可以覆盖您的
Student#toString方法以更干净地打印它 -
@Nathan 问题在于学生将在列表中 n 次,其中 n 是他们拥有的优先级数量。
-
@RohitMourya 你能详细说明一下吗?
-
@LarsChristensen 然后,只需检查它是否存在于具有相同优先级的列表中。
标签: java arraylist duplicates compare