java的steam流根据对象的属性去重
时间: 2023-08-10 14:06:21 浏览: 156
Java的Stream流可以根据对象的属性进行去重操作。你可以使用`distinct()`方法结合自定义的`equals()`和`hashCode()`方法来实现。以下是一个示例代码:
假设有一个`Person`类,包含`name`和`age`两个属性:
```java
class Person {
private String name;
private int age;
// 构造函数、getter和setter方法等省略
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
然后,我们有一个包含多个`Person`对象的集合,我们想根据`name`属性进行去重:
```java
List<Person> personList = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 25)
);
List<Person> distinctPersonList = personList.stream()
.distinct()
.collect(Collectors.toList());
```
上述代码将`personList`转换成Stream流,然后使用`distinct()`方法对流进行去重操作,最后通过`collect()`方法将去重后的结果收集到一个新的List中。
在`Person`类中,我们重写了`equals()`和`hashCode()`方法,根据`name`和`age`两个属性进行判断对象是否相等。这样,通过`distinct()`方法就可以根据`name`属性进行去重了。
阅读全文