我有两个Student对象列表。学生对象如下:
Student
int id
int class id
String name
int age
在一个列表中,我有学生对象,其中填充了classId,name和age字段。然后,我将它们插入到一个数据库中,该数据库返回这些相同对象的集合,其id填充了db模式指定的整数。我希望尽可能地将这两个列表等同,以确保db操作成功。我可以想到两种方法来做到这一点。使用除id之外的所有字段将输入列表和输出列表中的所有学生对象等同。或者,使用输出列表的值手动注入输入列表中每个学生的id。两种方式在实施时都非常不干净,所以我希望有一种干净的方法可以做到这一点?例如,在第一个选项中,我可以对输入和输出集合进行排序,然后迭代第一个集合,并将索引与每个字段的输出集合进行比较。
答案 0 :(得分:1)
您可以让学生覆盖.equals(Object o)
方法。
public class Student {
private int id;
private int classId;
private String name;
private int age;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (classId != other.classId)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
然后你可以比较两个学生:
Student s1 = ...;
Student s2 = ...;
if(s1.equals(s2)) {
//Do this when they are equal
}
这是一种检查相等性的简洁方法,所有Java函数都会调用这个覆盖的equals方法。您也可以将它与列表一起使用。
List<Student> studentList = ...;
Student s1 = ...;
if(studentList.contains(s1)) {
//Do this when s1 is in the list
}
如果您有任何疑问或我误解了您的问题,请告诉我。