使用Stream进行List转Map踩坑Duplicate key错误
报错代码
myList.stream().collect(Collectors.toMap(MyDto::getCd, MyDto::getNm));
报错信息
java.lang.IllegalStateException: Duplicate key 000001-01-0000000000002-0001-0002 (attempted merging values 2000 and 2000)
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:135)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:182)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
正确写法/稳妥写法
myList.stream().collect(Collectors.toMap(MyDto::getCd, MyDto::getNm, (v1, v2) -> v2)));
如果业务上,myList中的MyDto::getCd会拿到重复数据,就会导致Duplicate key错误产生。
所以需要指定重复key的处理规则。
(v1, v2) -> v1 :不覆盖
(v1, v2) -> v2 :直接覆盖旧的key
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架