Android:过滤对象列表时的concurrentmodificationexception

时间:2016-08-30 12:10:33

标签: java android arraylist filter concurrentmodification

我有一个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,也会发生此错误。

1 个答案:

答案 0 :(得分:0)

您会收到此异常,因为您在迭代期间从集合中删除了对象。什么是不允许的。您可以将要删除的对象存储在附加列表中,然后执行类似myObjects.removeAll(newList)的操作