实现Java Stream List根据某几个字段去重
1. 整体流程
步骤表格
步骤 | 描述 |
---|---|
1 | 创建一个自定义的类,重写hashCode()和equals()方法 |
2 | 使用Stream的distinct()方法去重 |
3 | 将List转换为Stream,使用collect()方法将去重后的元素收集为List |
2. 具体步骤及代码示例
步骤1:创建一个自定义的类,重写hashCode()和equals()方法
首先,你需要创建一个自定义的类,比如Person类,然后重写该类的hashCode()和equals()方法,以便Stream能够正确去重。
public 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);
}
}
步骤2:使用Stream的distinct()方法去重
接下来,使用Stream的distinct()方法可以很方便地去除重复元素。
List<Person> distinctPersons = persons.stream()
.distinct()
.collect(Collectors.toList());
步骤3:将List转换为Stream,使用collect()方法将去重后的元素收集为List
最后,将去重后的Stream再通过collect()方法转换为List。
List<Person> uniquePersons = distinctPersons.stream()
.collect(Collectors.toList());
关系图
erDiagram
Person {
string name
int age
}
通过以上步骤,你可以实现Java Stream List根据某几个字段去重的操作,希望对你有帮助。如果有任何疑问,欢迎随时向我提问。