Java List转Map时发生Duplicate key
错误信息:Duplicate key 3 (attempted merging values Wang Wu and Wang Wu 222)
1、错误再现
// new个list
List<ClassName> classNameList = new ArrayList<>();ClassName c1 = new ClassName();c1.setId(1);c1.setName("Zhang San");c1.setAge(11);
classNameList.add(c1);c1 = new ClassName();c1.setId(2);c1.setName("Li Si");c1.setAge(22);
classNameList.add(c1);c1 = new ClassName();c1.setId(3);c1.setName("Wang Wu");c1.setAge(33);
classNameList.add(c1);// 插入和上一条相同的id
c1 = new ClassName();
c1.setId(3);
c1.setName("Wang Wu 222");
c1.setAge(33);
classNameList.add(c1);// 输出list内容
classNameList.forEach(System.out::println);
// list内容
// ClassName(id=1, name=Zhang San, age=11)
// ClassName(id=2, name=Li Si, age=22)
// ClassName(id=3, name=Wang Wu, age=33)
// ClassName(id=3, name=Wang Wu 222, age=33) -- 和上一条的id一样Map mapParam = classNameList.stream().collect(Collectors.toMap(ClassName::getId,ClassName::getName));
上面的代码执行之后就会出现Duplicate key.....的错误。
2、解决方法
2-1、先出现的value覆盖后出现的value
// 将【->value1】改成【->value2】,即可实现后出现的value覆盖先出现的value
Map mapParamPrevious =classNameList.stream().collect(Collectors.toMap(ClassName::getId,ClassName::getName,(value1,value2)->value1));// 输出map内容
mapParamPrevious.forEach((key,value) -> System.out.println("key:" + key + "--- value:" +
value));// key:1--- value:Zhang San
// key:2--- value:Li Si
// key:3--- value:Wang Wu
2-2、将key相同的value拼接起来
// value1 + value2 + .....
Map mapParamAfter = classNameList.stream().collect(Collectors.toMap(ClassName::getId,ClassName::getName,(value1,value2) -> value1 + value2));// 输出map内容
mapParamAfter.forEach((key,value) -> System.out.println("key:" + key + "--- value:" + value));// key:1--- value:Zhang San
// key:2--- value:Li Si
// key:3--- value:Wang WuWang Wu Fugai -- Wang WuWang Wu Fugai
2-3、将key相同的value,作成list返回
// 将key相同的value存入list
Map<Integer, List<String>> paramMap =classNameList.stream().collect(Collectors.toMap(ClassName::getId, classParam ->{List<String> list = new ArrayList<>();list.add(classParam.getName());return list;},(List<String> value1,List<String> value2)->{value1.addAll(value2);return value1;}));// 输出map内容
paramMap.forEach((key,value) -> System.out.println("key:" + key + "--- value:" + value));// key:1--- value:[Zhang San]
// key:2--- value:[Li Si]
// key:3--- value:[Wang Wu, Wang Wu Fugai] -- 作成list
2-4、将key相同的对象,创建新对象之后,返回list
// 将key相同的对象,作成新的对象之后返回
Map<Integer, List<NameAndAge>> paramListMap =classNameList.stream().collect(Collectors.toMap(ClassName::getId, classParam ->{List<NameAndAge> nameAndAgesList = new ArrayList<>();NameAndAge nameAndAge = new NameAndAge();nameAndAge.setName(classParam.getName());nameAndAgesList.add(nameAndAge);return nameAndAgesList;},(List<NameAndAge> nameAndAge1,List<NameAndAge> nameAndAge2)->{nameAndAge1.addAll(nameAndAge2);return nameAndAge1;}));// 输出map内容
paramListMap.forEach((key,value) -> System.out.println("key:" + key + "--- value:" + value));// key:1--- value:[NameAndAge(name=Zhang San, age=11)]
// key:2--- value:[NameAndAge(name=Li Si, age=22)]
// key:3--- value:[NameAndAge(name=Wang Wu, age=33), NameAndAge(name=Wang Wu Fugai, age=33)]
扩展:如果确定key不会重复的话,可以参考Java8 List -> Map 拼接多个参数组成Key_頑張ろう!的博客-CSDN博客
Java List转Map时发生Duplicate key相关推荐
- [数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用
mysql插入一条数据方式有四种,接下来逐个说明验证: 前提: 有一个表,作为本次测试: CREATE TABLE `zs_test` (`id` int(11) NOT NULL AUTO_INCR ...
- java8 对象转map时重复key Duplicate key 该如何解决?
我们在利用java8 Lambda 表达式将集合中对象的属性转成Map时就会出现 Duplicate key xxxx , 说白了也就是key 重复了!案例如下: @Data @NoArgsCon ...
- JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
测试又报bug啦 接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码... Exce ...
- MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...
MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...
- Java8中stream()操作toMap()时Duplicate key问题解决
问题描述: 最近使用Java8中Steam()流进行tomap转换编程时,遇到以下错误 java.lang.IllegalStateException: Duplicate key bbbat jav ...
- MySQL使用on duplicate key update时导致主键不连续自增
在做数据统计的时候,我们经常会用到mysql的on duplicate key update语法来自动更新数据,比如 最近项目上需要实现这么一个功能:统计每个人每个软件的使用时长,客户端发过来消息,如 ...
- Exception in thread “main“ java.lang.IllegalStateException: Duplicate key xxx
debug.. hah- 这个错误是使用stream流把list收集成map搞的,原因是map的key是唯一的,如果不唯一就抛出了这个异常. 下面是异常代码 import java.util.Arra ...
- Java遍历Map集合,获取key、value等方式
首先构建一个Map集合: Map<String, Integer> buy=new HashMap<>();buy.put("苹果手机", 2);//添加键 ...
- List转Map duplicate key问题
list转map的时候,忘记了map的key不能重复的问题: 其实初衷就是想 利用map的key不能重复的问题.... 将list转为map,原以为是遍历list的方式,存map,然后map的key重 ...
最新文章
- #时间预测算法_改进的智慧交通系统出行时间预测算法
- axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
- 远控免杀专题3---msf自免杀
- 【Java线程池】Java线程池汇总,看这一篇文章就够了
- 原子变量 java_Java原子变量详解
- 在IDEA中安装使用Antlr
- 在centos6.5中安装github的客户端git
- java解析字符串_java 拼接字符和解析字符串
- 用PS制作电子签名方法总结
- [GUET-CTF2019]BabyRSA(p,q灵活应用)
- 高考倒计时100天....99天
- 学会自我管理有哪些好处?自我管理包括哪些内容?
- 如何做好一名计算机网络管理员
- RT-Thread学习笔记五——临界区与临界区保护
- 小程故事多 | 看来微服务就是一把双刃剑
- “数智化”技术全面提速新基建,巩固智慧变电站“防汛墙”
- VFW视频采集方案(Captureparms参数详细)
- 访问虚幻4引擎存储库 未来是否会支持c#为脚本语言探索 虚幻笔记1
- asp.net mvc 包含了一个 html 的助手类在哪,ASP.Net MVC助手
- 使用taro完成微信小程序拖拽排序