码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-22 19:17:08      阅读:452      评论:0      收藏:0      [点我收藏+]

标签:tsp   cti   entity   stream   异常解决   rap   ide   dup   方式   

测试又报bug啦

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

    Exception in thread "main" java.lang.IllegalStateException: Duplicate key 
    at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
    at java.util.HashMap.merge(HashMap.java:1254)
    at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
    at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)

key重复异常解决

报错的那行代码如下:

Map<Long, Entity> entityMap= entityList.stream().collect(Collectors.toMap(Entity::getType, (entity) -> entity));

这行代码的目的就是将一个list对象转为map对象,以type为key,以entity对象为value。
但是与平常用的方法不同,而是直接使用java8的stream方式,报错也很清楚,就是key重复,也就是说在使用toMap方法时,有重复的type值导致了这个报错,最终解决方式如下:

Map<Long, Entity> entityMap= entityList.stream().collect(Collectors.toMap(Entity::getType, Function.identity(),(entity1,entity2) -> entity1));

使用toMap()的重载方法,如果已经存在则不再修改来避免重复key的问题。

顺便吐槽一下,这已经是多久前的代码了,怎么今天才报出这个错,也是醉了。

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

标签:tsp   cti   entity   stream   异常解决   rap   ide   dup   方式   

原文地址:https://www.cnblogs.com/han-1034683568/p/8624447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!