使用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

posted @   vaen  阅读(1231)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示