【发布时间】:2014-08-06 17:06:38
【问题描述】:
为什么在 Java 中使用增强的 for 循环,我不能更改我通过引用迭代的内容?不是迭代器,而是我正在迭代的数据类型的字段。
我想遍历Maps(准确地说是MultiValueMaps)的列表,并检查地图的值是否可以更新。
我的问题是更改它的实际逻辑嵌套在基于地图的其他循环(下面的大纲代码)的深处,如果没有ConcurrentModificationExceptions,我找不到进行替换的方法抛出。原因是当我得到ConcurrentModificationException 处理一个循环时,由于代码嵌套很深,它会破坏另一个循环。
在主循环中,遍历地图,我想创建一个新地图,我只是添加东西,最后用它替换迭代地图。但这不起作用。
为什么会这样,我可以做些什么或研究什么来帮助我解决这个问题?
伪代码
for( Map loopMap : listOfMaps ) {
Map tempMap = new HashMap();
Set entrySet = loopMap.entrySet();
Iterator<MultiValueMap.Entry> iter = entrySet.iterator();
while( iter.hasNext() ) {
Map.Entry entry = (Entry) iter.next();
if( entry.getValue() == "test" ) {
tempMap.put( entry.getKey(), "new value" );
}
}
loopMap = tempMap;
}
为什么我不能改变地图所指的东西,即使我能够改变所指的价值?
【问题讨论】:
-
如果你能给出一个简短但完整的例子会有所帮助 - 你提供了很多我们不需要的东西的伪代码,而我相信你可以演示真正的问题在我们可以编译的大约 10 行真实代码中......
-
改用常规的 for 循环?
-
@JonSkeet 添加了实际代码,尽可能将其清理为只有与问题相关的代码
-
@DavidPostill 我知道异常是如何工作的,并且发布的内容最初对我有帮助,但真正的问题是我有嵌套循环,它们都被编辑了,我不知道如何保留异常从被抛出两个