错误信息: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相关推荐

  1. [数据库]---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 ...

  2. java8 对象转map时重复key Duplicate key 该如何解决?

    我们在利用java8  Lambda 表达式将集合中对象的属性转成Map时就会出现 Duplicate key  xxxx , 说白了也就是key 重复了!案例如下: @Data @NoArgsCon ...

  3. JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    测试又报bug啦 接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码... Exce ...

  4. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

  5. Java8中stream()操作toMap()时Duplicate key问题解决

    问题描述: 最近使用Java8中Steam()流进行tomap转换编程时,遇到以下错误 java.lang.IllegalStateException: Duplicate key bbbat jav ...

  6. MySQL使用on duplicate key update时导致主键不连续自增

    在做数据统计的时候,我们经常会用到mysql的on duplicate key update语法来自动更新数据,比如 最近项目上需要实现这么一个功能:统计每个人每个软件的使用时长,客户端发过来消息,如 ...

  7. Exception in thread “main“ java.lang.IllegalStateException: Duplicate key xxx

    debug.. hah- 这个错误是使用stream流把list收集成map搞的,原因是map的key是唯一的,如果不唯一就抛出了这个异常. 下面是异常代码 import java.util.Arra ...

  8. Java遍历Map集合,获取key、value等方式

    首先构建一个Map集合: Map<String, Integer> buy=new HashMap<>();buy.put("苹果手机", 2);//添加键 ...

  9. List转Map duplicate key问题

    list转map的时候,忘记了map的key不能重复的问题: 其实初衷就是想 利用map的key不能重复的问题.... 将list转为map,原以为是遍历list的方式,存map,然后map的key重 ...

最新文章

  1. #时间预测算法_改进的智慧交通系统出行时间预测算法
  2. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
  3. 远控免杀专题3---msf自免杀
  4. 【Java线程池】Java线程池汇总,看这一篇文章就够了
  5. 原子变量 java_Java原子变量详解
  6. 在IDEA中安装使用Antlr
  7. 在centos6.5中安装github的客户端git
  8. java解析字符串_java 拼接字符和解析字符串
  9. 用PS制作电子签名方法总结
  10. [GUET-CTF2019]BabyRSA(p,q灵活应用)
  11. 高考倒计时100天....99天
  12. 学会自我管理有哪些好处?自我管理包括哪些内容?
  13. 如何做好一名计算机网络管理员
  14. RT-Thread学习笔记五——临界区与临界区保护
  15. 小程故事多 | 看来微服务就是一把双刃剑
  16. “数智化”技术全面提速新基建,巩固智慧变电站“防汛墙”
  17. VFW视频采集方案(Captureparms参数详细)
  18. 访问虚幻4引擎存储库 未来是否会支持c#为脚本语言探索 虚幻笔记1
  19. asp.net mvc 包含了一个 html 的助手类在哪,ASP.Net MVC助手
  20. 使用taro完成微信小程序拖拽排序

热门文章

  1. 远程桌面教程及指定主机远程连接方法
  2. 前端背景图放置_web前端入门到实战:css 中的背景图片小技巧和存在的坑
  3. 【间歇性努力,不是真正的努力】
  4. 蓝牙开发那些事儿(3)——看看空中包
  5. [VMWare]vmx86版本不对
  6. Java并发相关知识(多线程、锁、容器、工具)
  7. android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)
  8. 我94年的,做了一年外包我就跑路了
  9. C#组件系列——NPOI使用手册
  10. python计算定积分