分享知识 传递快乐
例:
public static void main(String[] args) {
List<AreaEntity> list = new ArrayList<>();
AreaEntity entity = null;
for (int i = 1; i < 10; i++) {
entity = new AreaEntity();
entity.setId(i);
if (i > 6) {
entity.setName("TEST-T");
} else {
entity.setName("TEST-" + i);
}
list.add(entity);
}
Map<String, Integer> map = list.stream().collect(Collectors.toMap(AreaEntity::getName, AreaEntity::getId));
map.entrySet().stream().forEach(e -> System.out.println(e.getValue()));
}
报错:
java.lang.IllegalStateException: Duplicate key 7
问题分析
从异常可以看出,是在调用Collectors.toMap时出错,查看toMap的API:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toMap-java.util.function.Function-java.util.function.Function-
解决方法:
// 方式一
Map<String, Integer> map = list.stream().collect(Collectors.toMap(AreaEntity::getName, AreaEntity::getId, (value1, value2) -> {
return value2;
}));
// 方式二
Map<String, Integer> map = list.stream().collect(Collectors.toMap(AreaEntity::getName, AreaEntity::getId, (value1, value2) -> value2));
—————————
如有不足请留言指正
相互学习,共同进步
本文通过一个Java代码示例展示了在创建Map时遇到的`IllegalStateException: Duplicate key`错误。问题源自于尝试将一个含有重复键的流转换为Map。文章分析了异常原因,并提供了两种解决方案:使用自定义冲突解决策略(方式一和方式二)。这两种方法都是通过指定在遇到重复键时保留哪个值来避免冲突。

1万+

被折叠的 条评论
为什么被折叠?



