返回实体列表去重的一些思路
最近做新员工课题,需要实现在方法返回的一个实体类的List集合里去重(以实体类的某个字段为唯一标识),第一反应是利用Set+重写hashcode()和equals()方法,然后再将Set转回List,或者每次往集合里加实体的时候遍历比较(??),于是试了试
用个简单的类来代替一下,值得一提的是 java1.7引进的Objects.equals()方法避免了空指针异常的出现
public class Student {
private String name = " ";
private String id = " ";
private int age = 0;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return getAge() == student.getAge() &&
Objects.equals(getName(), student.getName()) &&
Objects.equals(getId(), student.getId());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getId(), getAge());
}
}
上面两种方法都不够优雅,还有更简单的方法,就是用HashMap,唯一标识作为key,实体作为value,然后在构造List的时候传入map.values()。继续积累经验吧。