我需要一些如何在迭代过程中通过retainAll修改集合
假设我有下一个代码:
set.forEach(it - > {
set.retainAll(someMapWithSets.get(it))
});
我尝试过迭代器的方法:
for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
String value = iterator.next();
set.retainAll(someMapWithSets.get(value))
}
它不起作用。已引发ConcurrentModificationException
。
如何正确地做到这一点?
更新。
整个任务是下一个:
我已设置
{A,B,C}
我有集合图,它指示元素是否兼容:
A: B,C - (means A is compatible with B and C and etc)
B: A,E,C
C: A,B
我需要有集合的地图,其中所有可能的兼容元素组合都存在:
A,B,C
所以,作为解决方案的一部分,我想我可以创建一个方法,只保留给定集合和所选元素的兼容元素。
public static Set<String> define(Set<String> elements, String rootElement) {
Set<String> result = someMapWithElements.get(rootElement);
result.retainAll(elements);
result.add(rootElement);
result.forEach(it -> result.retainAll(someMapWithElements.get(it)))
return result;
}
但很明显我得到了ConcurrentModificationException
在迭代同一对象时,不能使用retainAll
方法更改集合。因此,您需要创建一个新的集合(或其他集合(用作迭代变量,如:
new HashSet(set).forEach(it - > {
set.retainAll(someMapWithSets.get(it))
});
CCD_ 4可以被CCD_。
如果在迭代时确实需要更改集合,则需要在Iterator
中使用remove
方法。