Java中的list根据对象的所有字段去重
时间: 2023-07-22 10:23:12 浏览: 89
Java中可以通过自定义对象的equals()和hashCode()方法实现根据对象的所有字段去重。
首先,需要重写对象的equals()方法,比较对象的所有字段是否相等,例如:
```java
public class Person {
private String name;
private int age;
// 构造方法、getter和setter省略
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
}
```
在上面的代码中,equals()方法比较了对象的name和age字段是否相等。
接着,还需要重写对象的hashCode()方法,以便在HashMap或HashSet中使用。一般情况下,可以使用Objects.hash()方法根据对象的所有字段计算hashCode值,例如:
```java
public class Person {
private String name;
private int age;
// 构造方法、getter和setter省略
@Override
public boolean equals(Object o) {
// 省略equals()方法的实现
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
最后,使用HashSet去重即可,例如:
```java
List<Person> persons = new ArrayList<>();
// 添加多个Person对象到persons列表中
Set<Person> uniquePersons = new HashSet<>(persons);
```
这样,uniquePersons集合中的元素就是根据对象的所有字段去重后的结果。
阅读全文