測試又報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的問題。
順便吐槽一下,這已經是多久前的代碼了,怎么今天才報出這個錯,也是醉了。
