gpt4 book ai didi

java - 对象的 ArrayList,比较对象并查找重复项,每个重复项仅将对象添加到新的 ArrayList 一次

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:17 26 4
gpt4 key购买 nike

我已经弄清楚如何比较两个 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”?这是我的输出,有没有办法只获取标记的部分? Heres my output, is there a way to only get the marked section

我已经坚持了很长时间。我非常感谢关于更好地制作 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())
if (!duplicateStudents.contains(studentB))
duplicateStudents.add(studentB);

请注意,只有如果您覆盖了Student 类的equalshashCode 方法,这才会起作用,因为对象没有相同的引用。

基本上,您将在添加之前检查 Student 是否已经在列表中。如果您正确实现了您的equals 方法,学生A 将不会等于具有不同优先级的A

关于java - 对象的 ArrayList,比较对象并查找重复项,每个重复项仅将对象添加到新的 ArrayList 一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com