提问人:shashwat 提问时间:11/15/2023 最后编辑:Chaosfireshashwat 更新时间:11/15/2023 访问量:53
使用流时 for 循环内部更改列表的值
Value of list changing inside for loop while using stream
问:
Set<String> l = locMap.keySet();
for (Map.Entry<String, String> ven : venderAndFactoryLocMap.entrySet()) {
if (ven.getValue().equals(VENDOR)) {
Map<String, String> x1 = l.stream().collect(Collectors.toMap(x -> x + "-" + ven.getKey(), x -> PROCESS));
locMap.putAll(x1);
}
}
在上面,locMap的值不断变化,但L(即哈希集)的值也在变化,我认为一旦我们分配了一个变量,它的值就不会在堆栈中改变,为什么会这样?
我原以为 Set 保持不变,而我们正在更改 locMap
答:
2赞
Georgii Lvov
11/15/2023
#1
由于 的实现,它被更改了。来自 javadoc 的 :keySet()
HashMap#keySet
返回此映射中包含的键的 Set 视图。该集合是 在地图的支持下,因此对地图的更改将反映在集合中,并且 反之亦然。
要保持该值不变,您需要根据 locMap 的键集创建一个新集:
Set<String> l = new HashSet<>(locMap.keySet());
评论