用java写出一个stream流中根据字段去重的方法
时间: 2023-03-30 07:00:23 浏览: 342
Java中对List去重 Stream去重的解决方法
可以使用Java 8的Stream API中的distinct()方法来实现根据字段去重。例如,假设有一个List<Person>,其中Person类有一个字段name,可以使用以下代码实现根据name字段去重:
List<Person> distinctPersons = persons.stream()
.filter(distinctByKey(Person::getName))
.collect(Collectors.toList());
其中,distinctByKey()方法可以自定义实现,例如:
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;
}
这个方法将根据传入的keyExtractor函数提取对象的某个字段作为key,然后使用ConcurrentHashMap来记录已经出现过的key,最后返回一个Predicate用于Stream的filter()方法进行过滤。
阅读全文