List<String> strings = Arrays.asList("3","55","3");
Map<String,Integer> map = strings
.stream()
.collect(Collectors.toMap(s ->s, s -> s.length()));
返回
java.lang.IllegalStateException: Duplicate key 1
我希望复制键3
答案 0 :(得分:2)
这已在Java 9中修复。现在错误消息是正确的:
java.lang.IllegalStateException: Duplicate key 3 (attempted merging values 1 and 1)
答案 1 :(得分:1)
似乎,这是JDK 8中的一个错误,但不再是JDK 9的情况。原因之一是我无法在JDK 9上复制它并且导致@Zircon提供的两个this link得出关于问题并且从JDK 9开始修复。
似乎有关于此问题的几篇帖子,另一个链接是:
https://bugs.openjdk.java.net/browse/JDK-8040892
本身就是其他一些帖子的副本。
答案 2 :(得分:0)
是的,它是一个错误,但还有另一种方法可以通过身份函数将其转换为地图:
List<String> strings = Arrays.asList("3","55","3");
Map<String, List<String>> map = strings.stream()
.collect(Collectors.toMap(Function.identity(), Arrays::asList));
通过执行此操作,您将获得正确的错误
java.lang.IllegalStateException: Duplicate key [3]
对于具有唯一值的数组
List<String> strings = Arrays.asList("3","55","4");
结果将是
{55=[55], 3=[3], 4=[4]}