stream将list转map时,key重复导致报错的问题解决方案
要将List对象集合转为map集合,可以通过stream流的形式快速实现转换:
异常:
意思为map中出现了重复的key,也就是说通过上述方法转map时,出现重复key并不会出现覆盖的情况,而是再次在map中添加一个重复的key,导致报错。
所以通过stream实现list转map时,要实现重复的key会被覆盖,可以使用Function.identity()方法:
//三个Users对象组成一个List集合 List<Users> list = new ArrayList<>(); list.add(Users.builder().userName("11").userId(1).build()); list.add(Users.builder().userName("11").userId(2).build()); list.add(Users.builder().userName("33").userId(3).build()); //将list转map,这里是出现重复key时,覆盖前一个 Map<String, Users> usersMap = list.stream() .collect(Collectors.toMap(Users::getUserName, Function.identity(), (user1, user2) -> user2)); System.out.println(usersMap.get("11")); //输出结果: edu.nf.ch08.entity.Users@41aaedaa
增加重复key情况下的冲突处理策略:
Map<String, Integer> dataMap = employees.stream().collect(Collectors.toMap(e -> e.getFirstName(), e -> e.getAge(), (k1, k2)-> k1)); Assert.assertThat(dataMap, hasKey("zhang")); Assert.assertThat(dataMap, hasKey("Li")); Assert.assertThat(dataMap, hasKey("Chen")); Assert.assertThat(dataMap.keySet(), hasSize(3)); Map<Integer, Employee> employeeMap = employees.stream().collect(Collectors.toMap(e->e.getAge(), e->e, (k1, k2) -> k1)); Assert.assertThat(dataMap.keySet(), hasSize(3));
这里的处理策略是:
(k1, k2) -> k1
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-04-14 HSSFWorkbook强制换行
2021-04-14 POI导出EXCEL文档,表格水平垂直居中、表头添加颜色等常用属性方法
2021-04-14 HSSFWorkbook apache.poi设置行高