2022-02-22 java8集合根据元素属性去重

34 阅读1分钟

在开发经常遇到一个集合中的元素是一个类,然后需要去重
只需要如下两步就可以了
1 创建一个方法

private 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;
    }

2 使用
集合直接用filter去过滤

List<Faculty> facultyRetList = facultyList.stream().filter(distinctByKey(Faculty::getId)).collect(Collectors.toList());

如此,得到的就是通过id 去重的 Faculty集合了

去重分析

1 distinctByKey 这个方法其实就一个function函数,传入的是要去重的id

**2 利用 ConcurrentHashMap的 **putIfAbsent方法,实现是否可以放入字段,类似于redis 的 setnx

3 filter 里面需要的是布尔值,刚好,将为false 的过滤掉

4 其实相当于把去重字段放入了 ConcurrentHashMap,然后根据判断结果 得到去重后的集合

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。