distinct()不提供按照属性对对象列表进行去重的直接实现。它是基于hashCode()和equals()工作的。
如果我们想要按照对象的属性,对列表进行去重,我们可以通过如下方法来实现:
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;
} List<Entity> lists = list.stream().filter(distinctByKey(b->b.getTid())).collect(Collectors.toList()); 1、使用LinkedHashSet删除arraylist中的重复数据
2、使用java8新特性stream进行List去重
3、利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件保证顺序:
4、利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复