接到測試小夥伴的問題,說是一個接口不返回數據了,好吧,雖然不是我寫的接口任務落到頭上也得解決,本地調試了一下,好傢伙,直接拋了個異常出來,這又是哪位大哥喝醉了寫的代碼...java
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)
報錯的那行代碼以下:ide
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的問題。lua
順便吐槽一下,這已是多久前的代碼了,怎麼今天才報出這個錯,也是醉了。調試