使用流时,列表的值在 for 循环内发生变化

问题描述 投票:0回答:1
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

java spring spring-boot stream
1个回答
0
投票

由于实施了

keySet()
,因此有所更改。它始终返回地图的实际键集。

要保持该值不变,需要根据locMap的keyset创建一个新的集合:

Set<String> l = new HashSet<>(locMap.keySet());
© www.soinside.com 2019 - 2024. All rights reserved.