stream流按照指定字段进行去重
时间: 2024-01-30 18:03:06 浏览: 105
List集合多个复杂字段判断去重的案例
可以使用Java 8中的Stream API来按照指定字段进行去重。假设有一个包含Person对象的List,要按照name字段进行去重,可以按照以下方式实现:
```
List<Person> persons = ... // 初始化Person对象列表
List<Person> distinctPersons = persons.stream()
.filter(distinctByKey(p -> p.getName()))
.collect(Collectors.toList());
```
其中,distinctByKey是一个自定义的方法,用于根据指定字段进行去重。具体实现如下:
```
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
这个方法使用了ConcurrentHashMap来记录已经出现过的键值对,如果出现过则过滤掉,否则保留。在上述代码中,我们使用了lambda表达式来指定按照Person对象的name字段进行去重。
阅读全文