Map是我们在工作中经常使用数据结构,但也因为自己的忽略造成一些bug,这里做一个小结。
一、lamda表达式中,list组成map但key重复造成IllegalStateException。
public static void main(String[] args) {
ArrayList<InnerVO> innerList = new ArrayList<>();
InnerVO innerVO1 = new InnerVO();
innerVO1.setId("testId1");
innerVO1.setName("testName1");
InnerVO innerVO2 = new InnerVO();
innerVO2.setId("testId1");
innerVO2.setName("testName2");
innerList.add(innerVO1);
innerList.add(innerVO2);
Map<String, String> map = innerList.stream().collect(Collectors.toMap(InnerVO::getId, InnerVO::getName));
System.out.println(map);
}
由于list中不同对象的key不同,形成重复key引起的异常。
Exception in thread "main" java.lang.IllegalStateException: Duplicate key testName1
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.c