【发布时间】:2016-02-06 00:41:51
【问题描述】:
我正在尝试遍历 Multimap 并根据任意检查删除一些键及其值。
Multimap<Integer, Character> myMultimap = ArrayListMultimap.create();
myMultimap.keySet().stream().forEach((bin) -> {
if (random.nextDouble() < p) {
myMultimap.removeAll(bin);
}
});
这显然会引发 ConcurrentModificationException。
所以我尝试了:
Iterator<Integer> i = myMultimap.keySet().iterator();
while (i.hasNext()) {
if (random.nextDouble() < p) {
i.remove();
}
}
然而,这会导致 java.lang.IllegalStateException:自上次调用 remove() 以来没有调用 next()。 我尝试过像下面的代码一样使用它,但经过几次迭代后我仍然遇到相同的错误。
Iterator<Integer> i = myMultimap.keySet().iterator();
while (i.hasNext()) {
if (random.nextDouble() < p) {
i.remove();
i.next();
} else {
i.next();
}
}
【问题讨论】: