strem流对对象集合的某个字段去重
时间: 2024-02-24 20:54:01 浏览: 80
Java 8中的流可以使用distinct()方法对对象集合中的某个字段进行去重。假设有一个Person类,其中包含id和name字段,可以使用以下代码根据id字段对Person对象集合进行去重操作:
```
List<Person> personList = new ArrayList<>();
//添加一些Person对象到personList
List<Person> distinctPersons = personList.stream()
.filter(distinctByKey(Person::getId))
.collect(Collectors.toList());
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
这个代码中,我们使用了一个自定义的distinctByKey()方法,它返回一个Predicate对象,该对象接受Function参数来提取对象的key。我们使用ConcurrentHashMap来存储已经出现过的key,因为ConcurrentHashMap是线程安全的。最后,我们使用filter()方法将不重复的Person对象留下来,并使用collect()方法将它们收集到一个新的List中。
阅读全文