Java从映射列表中删除元素
我有JavaJava从映射列表中删除元素,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
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();
}
没有发现任何问题。您是否遇到任何问题或只是在寻找更好的方法来实现您的目标?请参阅