java stream distinct() 指定对象属性进行去重
CSLShare
2022年06月20日 10:05
收录于文集
共9篇

distinct()不提供按照属性对对象列表进行去重的直接实现。它是基于hashCode()和equals()工作的。

如果我们想要按照对象的属性,对列表进行去重,我们可以通过如下方法来实现:

代码块
JavaScript
自动换行
复制代码

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;

}
复制成功
代码块
JavaScript
自动换行
复制代码
List<Entity> lists = list.stream().filter(distinctByKey(b->b.getTid())).collect(Collectors.toList());
复制成功

Java集合List去重的几种方式 :

  • 1、使用LinkedHashSet删除arraylist中的重复数据

  • 2、使用java8新特性stream进行List去重

  • 3、利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件保证顺序:

  • 4、利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复