根据list中对象的单个/多个属性去重
1、按照对象的某个属性去重
1)借助工具类实现
//去重工具类
public class StreamEx {
public 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;
}
}
//实现,result类型为List<Map<String, Object>>,后文同,不再复述
result = list.stream().filter(StreamEx.distinctByKey(x -> x.get("code"))).collect(Collectors.toList());
2)普通去重
result = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(e -> e.get("code")))), ArrayList::new));
2、按照对象的多个属性去重
//根据QueryData对象的ruleCode,和version去重
result = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(e -> e.get("code") + "#" + e.getString("version")))), ArrayList::new));
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147340.html