我有一个Arraylist
个对象开始从主列表中填充:
List<Object> myObjects = new ArrayList<>(masterList);
然后我会遇到一系列条件:
for (Condition condition : listOfConditions) {
applyCondition(condition);
}
并开始删除对象:
private void applyCondition(Condition condition) {
if (condition.equals("condition1") {
for (Object object : myObjects) {
if (object.doesntMatchCondition1()) {
myObjects.remove(object);
}
}
}
else if (condition.equals("condition2") {
... etc.
}
应该给我一个最终筛选的符合所有条件的对象列表。
但是,我第一次尝试从myObjects列表中删除对象时得到java.util.ConcurrentModificationException
。为什么会这样?没有多个线程同时访问列表,它应该同步应用操作。
即使我制作方法synchronized
,也会发生此错误。
答案 0 :(得分:0)
您会收到此异常,因为您在迭代期间从集合中删除了对象。什么是不允许的。您可以将要删除的对象存储在附加列表中,然后执行类似myObjects.removeAll(newList)的操作