1.根据对象的某个属性去重:
网上找的stream流去重方法,可以根据类的某个属性去重,这里记录一下文章来源:https://www.toymoban.com/news/detail-688416.html
/**
*只获取重复的数据
* @param keyExtractor
* @param <T>
* @return
*/
public static <T> Predicate<T> distinctNotByKey(Function<? super T, ?> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) != null;
}
/**
*自定义函数去重(采用 Predicate函数式判断,采用 Function获取比较key)
* 内部维护一个 ConcurrentHashMap,并采用 putIfAbsent特性实现
* @param keyExtractor
* @param <T>
* @return
*/
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;
}
使用:文章来源地址https://www.toymoban.com/news/detail-688416.html
public static void testC() {
List<UserAccount> list = new ArrayList<>();
UserAccount a = new UserAccount();
a.setId(57L);
UserAccount b = new UserAccount();
b.setId(57L);
UserAccount c = new UserAccount();
c.setId(56L);
list.add(a);
list.add(b);
list.add(c);
//根据id去重
List<UserAccount> collect = list.stream().filter(distinctByKey(UserAccount::getId)).collect(Collectors.toList());
System.out.println(collect);
System.out.println(collect.size());
}
到了这里,关于java Stream去重操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!