stream流对list 对象里的多个字段联合去重
时间: 2024-11-03 11:22:40 浏览: 20
List集合多个复杂字段判断去重的案例
Stream API 在Java中提供了一种方便的方式来处理集合数据,对于List对象中的多个字段联合去重,你可以使用`distinct()`函数配合自定义的比较规则。首先,你需要创建一个`equals()`和`hashCode()`方法的组合,这两个方法一起确定了两个对象是否被视为“相同”。假设你有一个Person类,包含姓名(name)和ID(id)两个字段,你可以这样做:
```java
class Person {
String name;
int id;
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof Person)) return false;
Person other = (Person) obj;
return Objects.equals(this.name, other.name) && this.id == other.id;
}
@Override
public int hashCode() {
return Objects.hash(name, id);
}
}
List<Person> list = ...; // 假设这是你要操作的列表
Set<Person> distinctList = list.stream()
.distinct() // 使用stream的默认equals和hashCode规则去重
.collect(Collectors.toSet()); // 转换为Set,自动去除重复元素
// 如果需要保留List结构,可以使用Collectors.toList()替换toSet()
List<Person> deduplicatedList = distinctList.stream().collect(Collectors.toList());
```
在这个例子中,`distinct()`会基于Person类的equals和hashCode方法来判断两个对象是否相等,从而实现多个字段的联合去重。
阅读全文