childList = childList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.get("id").toString()))), ArrayList::new))

使用到了collectingAndThen完成根据属性进行去重的操作,对于该去重操作的关键使用到了collectingAndThen、toCollection、TreeSet,有点难以理解。

//构造一个基于id比较器的treeSet
TreeSet<HashMap<String,Object>> treeSet = new TreeSet<>(Comparator.comparing(o->o.getString("id")));//将元素塞进treeSet
for (HashMap map : childList){treeSet.add(map);
}
//转换成List
List<HashMap<String,Object>> result2 =  new ArrayList<>(treeSet);

理解根据对象的属性进行去重的核心是,将集合放到TreeSet中,然后再将TreeSet转为List, 其中TreeSet要传入一个根据哪个属性进行比较的比较器,然后使用public ArrayList(Collection<? extends E> c)将TreeSet放入构造器中生成List。

collectingAndThen:进行结果的收集 ,再进行下一步的处理。

   public static<T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream,Function<R,RR> finisher) {
参数1:stream 流 Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.get("id").toString())))

参数2;ArrayList的有参构造方法: ArrayList::new

最后收集流到List 集合当中:childList.stream().collect

JAVA8 lambda按指定字段去重相关推荐

  1. mysql中以指定字段去重_数据库根据指定字段去重

    需求:对一张用户表根据name/email/card_num字段去除重复数据: 思路:用group by方法可以查询出'去重'后的数据,将这些数据存储到一张临时表中,然后将临时表的数据存储到指定的表中 ...

  2. php根据指定字段去重,php二维数组根据某个字段去重

    php的二维数组根据某个字段去重,在这默认为二维数组的结构是一样的,现在根据二维数组里的id字段去重,把id相同的重复的元素去掉 /** * 二维数组根据某个字段去重 * @param array $ ...

  3. SQL数据库根据指定字段去重

    需求:对一张用户表根据name/email/card_num字段去除重复数据: 思路:用group by方法可以查询出'去重'后的数据,将这些数据存储到一张临时表中,然后将临时表的数据存储到指定的表中 ...

  4. java steam 去重_java steam List指定字段去重

    如:角色去重处理 baseRoleList = baseRoleList.stream().collect(Collectors.collectingAndThen(Collectors.toColl ...

  5. Mysql去重查询(根据指定字段去重)

    在日常数据查询中,多有需要进行数据去重的查询,或删除重复数据的情况,以下罗列集中数据去重查询: 1.根据全部字段的去重查询: select distinct * from table 2.根据某些字段 ...

  6. stream流map 多个字段_stream流根据对象指定字段去重

    先封装一个去重的方法 import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.fun ...

  7. java list 字段去重_如何实现java8 list按照元素的某个字段去重

    list 按照元素的某个字段去重 @Data @AllArgsConstructor @NoArgsConstructor public class Student { private Integer ...

  8. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  9. Python之pandas:对dataframe数据的索引简介、应用大全(输出索引/重命名索引列/字段去重/设置复合索引/根据列名获取对应索引)、指定某字段为索引列等详细攻略

    Python之pandas:对dataframe数据的输出索引.重命名索引列/字段去重/设置复合索引/根据列名获取对应索引.指定某字段为索引列等详细攻略 目录 对pandas中dataframe数据中 ...

最新文章

  1. 如何开启PostGreSQL的远程访问端口?
  2. Java 读写锁实现原理
  3. python如何安装matplotlib_详解python安装matplotlib库三种失败情况
  4. java 右键事件_java table右键点击事件
  5. 清华大学 计算机系 尹霞,轮椅上的清华博士毕业了,刷屏的还有她......
  6. c语言位运算负数的实例_0基础学习C语言第三章:位运算
  7. 【LCT】网络(luogu 2173/ZJOI2011)
  8. 【渝粤教育】国家开放大学2018年春季 8634-21TAndroid智能手机编程 参考试题
  9. Oracle中修改遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”
  10. epson me 1+只有主机能打印不能共享网络打印问题的处理
  11. c语言数据类型上机题,2011计算机二级C语言自测题:数据类型及其运算
  12. LRN局部响应归一化
  13. VC2010升级到VC2015遇到问题及解决办法
  14. Win7_D旗舰版_201906 twm000出品
  15. 路飞项目整体路程(六)
  16. adb命令刷机vivox20_vivo手机如何双清?vivo双wipe刷机教程
  17. 免费好用的APP你值得一试
  18. Spark RDD与Partion
  19. 计算机为动态分区无法安装系统,装系统时提示目标分区是动态磁盘的gpt分区,需要在pe环境下进行备份或还原怎么解决...
  20. 三维计算机动画制作软件是,三维影视动画制作软件

热门文章

  1. python3-爬取cnnvd漏洞信息-代理+多线程
  2. 在AD中创建子域和域树
  3. 自动控制原理8.1---非线性控制系统概述
  4. ArcGIS基础实验操作100例--实验76按格网统计点要素
  5. 默蓝网络通信TCP/HTTP测试工具介绍
  6. VS2010添加资源文件
  7. Vivado Turtorial 01 —— 使用vivado中debug功能(类似ISE中ChipScope)
  8. 【高通qdcm使用总结】
  9. swagger添加@ApiImplicitParams后出现错误 Required String parameter is not present
  10. 使用SimpleUpdater实现WinForm自动升级