在开发经常遇到一个集合中的元素是一个类,然后需要去重
只需要如下两步就可以了
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…,如有侵权,请联系删除。