Java从映射列表中删除元素

Java从映射列表中删除元素,java,arrays,Java,Arrays,我有JavaArrayList。可以按如下方式从该列表中删除元素吗: for (Map<String, Object> anObject : manyObjects) { if (anObject.get("x").equals("y")) { manyObjects.remove(anObject); } } Iterator<Map<String, Object>> iter = m

我有Java
ArrayList
。可以按如下方式从该列表中删除元素吗:

    for (Map<String, Object> anObject : manyObjects) {
        if (anObject.get("x").equals("y")) {
            manyObjects.remove(anObject);
        }
    }
Iterator<Map<String, Object>> iter = manyObjects.iterator();
while (iter.hasNext()) {
    if (iter.next().get("x").equals("y"))
        iter.remove();
}
for(映射一个对象:多个对象){
如果(anObject.get(“x”)等于(“y”)){
许多对象。删除(一个对象);
}
}

这种方法有什么根本性的错误吗?

在使用增强的for循环对列表进行迭代时,不能从列表中删除元素,因为它将抛出CuncurrentModificationException。您可以改用显式迭代器:

Iterator<Map<String, Object>> iter = manyObjects.iterator();
while (iter.hasNext()) {
    Map<String, Object> anObject = iter.next();
    if (anObject.get("x").equals("y")) {
        iter.remove();
    }
}
Iterator iter=manyObjects.Iterator();
while(iter.hasNext()){
Map anObject=iter.next();
如果(anObject.get(“x”)等于(“y”)){
iter.remove();
}
}

不,在使用增强的for循环对列表进行迭代时,不能对列表进行结构修改(例如从列表中删除元素)。这(很可能)最终会导致
ConcurrentModificationException

以下是使用流API的更好方法:

manyObjects.removeIf(map -> map.get("x").equals("y"));
“旧”(Java 8之前)方法是使用迭代器和
remove()
方法,如下所示:

    for (Map<String, Object> anObject : manyObjects) {
        if (anObject.get("x").equals("y")) {
            manyObjects.remove(anObject);
        }
    }
Iterator<Map<String, Object>> iter = manyObjects.iterator();
while (iter.hasNext()) {
    if (iter.next().get("x").equals("y"))
        iter.remove();
}
Iterator iter=manyObjects.Iterator();
while(iter.hasNext()){
if(iter.next().get(“x”).equals(“y”))
iter.remove();
}

没有发现任何问题。您是否遇到任何问题或只是在寻找更好的方法来实现您的目标?请参阅