stream流根据某一属性去重
时间: 2023-10-26 13:06:49 浏览: 100
可以使用Java 8的Stream API来根据某一属性对流进行去重操作。假设我们有一个类Person,有属性name和age,现在想要根据name属性去重,可以按照以下步骤进行操作:
1. 首先,确保Person类正确定义了`equals`和`hashCode`方法,以便正确比较对象的相等性。在这个例子中,我们只关心name属性,所以可以只在equals方法中比较name属性。
```java
class Person {
private String name;
private int age;
// constructors, getters, setters
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
```
2. 然后,假设我们有一个包含多个Person对象的List,可以将其转换为Stream,并使用`distinct`方法来根据name属性进行去重。
```java
List<Person> personList = // 获取Person对象列表
List<Person> distinctPersons = personList.stream()
.distinct()
.collect(Collectors.toList());
```
以上代码将生成一个新的List,其中包含根据name属性去重后的Person对象。请注意,`distinct`方法依赖于重写的`equals`和`hashCode`方法来正确判断对象的相等性。
希望这个例子对你有所帮助!如果有任何问题,请随时提问。
阅读全文