java list stream().distinct() 对象去重使用
时间: 2023-10-24 17:13:06 浏览: 59
如果要对一个 List 中的对象进行去重,可以使用 Java 8 中的 Stream API 和 distinct() 方法。
假设我们有一个 Person 类,它有两个属性 name 和 age:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
现在我们有一个 List<Person>,我们想要按照 name 去重,可以使用以下代码:
```
List<Person> people = // 获取 List<Person> 对象
List<Person> uniquePeople = people.stream()
.distinct()
.collect(Collectors.toList());
```
需要注意的是,为了让 distinct() 方法正确去重,需要在 Person 类中实现 equals() 和 hashCode() 方法。如果没有实现,它会默认使用 Object 类中的 equals() 方法进行比较,这通常不是我们想要的。因此,Person 类应该像下面这样实现:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
这样,当我们使用 distinct() 方法时,它就会正确地根据 name 进行去重。