stream流按照某个字段去重
时间: 2023-10-15 15:02:43 浏览: 103
可以使用Java 8中的流(Stream)和Collectors工具类来实现按照某个字段去重:
假设有一个Person类,有两个属性name和age,我们要按照name字段去重:
```java
public class Person {
private String name;
private int age;
// 省略getter和setter方法
}
```
可以使用以下代码:
```java
List<Person> persons = new ArrayList<>();
// 添加数据到persons
List<Person> distinctPersons = persons.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))),
ArrayList::new
));
```
这里使用了Collectors的collectingAndThen()方法,该方法可以将Collector转换为另一种类型。
首先使用toCollection()方法将流中元素收集到TreeSet中,通过传入Comparator.comparing()方法来指定按照哪个字段去重。然后再使用ArrayList::new将TreeSet转换为ArrayList,即去除Set中的重复元素后,将结果转换为List返回。
阅读全文