以下是示例代码,根据我的知识,建议我这里出了什么问题,每次我都传递一个新密钥,它仍然会显示重复密钥。
/\Qstring-to-search\E
答案 0 :(得分:0)
一些列表元素是重复的。
因此indexOf
将返回相同的值 - >抛出重复的密钥异常。
你可以做的是做一个正常的for
循环:
Map<Integer, String> map = new HashMap<>();
for (int i = 0; i < listOfCities.size(); i++) {
map.put(i, listOfCities.get(i));
}
答案 1 :(得分:0)
您获得该异常,因为您的流中有重复的值。您可以使用IntStream
生成所需的结果:
Map<Integer, String> map = IntStream.range(0, listOfCities.size())
.mapToObj(Function.identity())
.collect(Collectors.toMap(Function.identity(), listOfCities::get));
答案 2 :(得分:0)
使用简单的 for 循环将是这里的方法。如果你真的想使用Streams
IntStream.range(0, listOfCities.size())
.collect(HashMap::new, (map, index) -> map.put(index, listOfCities.get(index)), HashMap::putAll);
这会产生
{0=Istanbul, 1=Istanbul, 2=Budapest, 3=Delhi, 4=Amsterdam, 5=Canberra, 6=Canberra}
上面创建了一个新的HashMap
,我们添加了由索引键入的城市名称。最后一个组合器仅在使用并行流时适用,并用于组合多个映射。