Java Stream方式List转Map key 重复报错Duplicate key异常

原创     发表于 2020-11-04 12:58     阅读 66  

在编码中,通过Java Stream方式list转map一般作为首选,快捷方便效率高!转化方式代码如下:

public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(3);

Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(e -> e, e -> e));
System.out.println(collect);
}

stream方式是从Java8提供的新特性,功能强大且代码简洁。

上述代码编译通过,但是执行这段代码,则是会抛出异常的。异常参考如下:

Exception in thread "main" java.lang.IllegalStateException: Duplicate key 3

这个异常就是将List 转为 Map时因为 key重复导致的,其实我们只需要在转化时加个判断,便解决这个问题。下面贴出解决代码:

Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(e -> e, e -> e, (v1, v2) -> v2));


输出结果如下:

{1=1, 2=2, 3=3}