例如,我有一个名为StudentListA和StudentListB的arraylist,其中包含许多学生。
={学生1,学生2,学生3......}
StudentListB={Student A,Student B,Student C….}
每个学生都有自己的属性,如姓名、地址、gpa等。我如何比较学生1和学生A的属性值是否相同,等等。
现在我在想这样的事情:
int i = 0;
for (Student student : StudentListA){
if(student.getName().equals(studentListB.get(i).getName() &&
student.getAddress().equals(studentListB.get(i).getAddress()....){
//Do smtg
}
i++;
}
有更简单的方法吗?因为我有很多优点。我想知道第一个和第二个名单上的学生是否完全相同。
您应该将属性比较移动到Student#equals
方法。然后在循环中使用Student#equals
:
for (Student student : StudentListA){
if(student.equals(studentListB.get(i))){
//Do smtg
}
i++;
}
你可以看看Lombock EqualsAndHashCode——这是生成#equals方法的最简单方法。
如果你不允许使用lombock,那么你必须自己编写Student#equals
。
在现实世界中,很少为#equals
编写实现,因为IDE可以帮助您生成它。
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (this.name != null ? !name.equals(student.name) : student.name != null) return false;
return true;
}
有更简单的方法吗?因为我有很多优点。
Java本身没有捷径来测试两个不同的对象是否具有彼此相等的所有相应属性。但是,您可以编写一个执行这种测试的方法,以便您可以重用它,并且更好地分解您的代码。您也可以选择它作为给定类型的对象的值相等的定义,方法是实现该比较的方法覆盖Object.equals()
。
如果你覆盖了对象。equals()
然后确保覆盖对象。hashcode()
,以保持与equals()
的一致性。测试结果相等的对象应该具有相同的哈希代码,尽管不一定相反。
//示例实现,
public int compareTo(Student o){
if (o.hashCode() < this.hashCode()){return -1}
else if(o.hashCode() > this.hashCode()) {return 1}
return 0;
}
使用集合。排序
现在您有两个排序列表,您可以使用轻松比较两个排序列表。