Stream流中list集合怎么多字段去重
时间: 2023-07-18 19:48:20 浏览: 66
在Java 8及以上版本中,可以使用Stream流的distinct()方法对集合进行去重操作。如果要根据多个字段进行去重,可以使用Stream流的map()方法和collect()方法,结合lambda表达式进行处理。
以下是示例代码:
```java
public class Person {
private String name;
private int age;
private String gender;
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// 省略getter和setter方法
@Override
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age &&
Objects.equals(name, person.name) &&
Objects.equals(gender, person.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
}
List<Person> personList = new ArrayList<>();
personList.add(new Person("Tom", 20, "male"));
personList.add(new Person("Jerry", 22, "male"));
personList.add(new Person("Lily", 20, "female"));
personList.add(new Person("Tom", 20, "male"));
personList.add(new Person("Lily", 20, "female"));
List<Person> uniquePersonList = personList.stream()
.map(person -> new Person(person.getName(), person.getAge(), person.getGender()))
.distinct()
.collect(Collectors.toList());
System.out.println(uniquePersonList);
```
在上面的示例代码中,我们定义了一个Person类,并创建了一个包含多个Person对象的列表personList。我们在Person类中实现了`equals()`和`hashCode()`方法,用于指定去重的关键字,即按照name、age、gender属性进行去重。
我们使用Stream流的map()方法将Person对象转换为新的Person对象,这样可以避免在去重时修改原有的对象。然后使用distinct()方法进行去重操作,并将结果存储在uniquePersonList中。
最后输出去重后的Person对象列表。