Beim Durchlaufen einer Schleife durch eine Liste möchte ich ein Element einer Liste in Abhängigkeit von einer Bedingung entfernen. Siehe den Code unten.
Dies führt zu einer "ConcurrentModification"-Ausnahme.
for (Object a : list) {
if (a.getXXX().equalsIgnoreCase("AAA")) {
logger.info("this is AAA........should be removed from the list ");
list.remove(a);
}
}
Wie kann man dies tun?
Sie können und sollten eine Liste nicht ändern, während Sie darüber iterieren. Sie können dieses Problem lösen, indem Sie die zu entfernenden Objekte vorübergehend speichern:
List<Object> toRemove = new ArrayList<Object>();
for(Object a: list){
if(a.getXXX().equalsIgnoreCase("AAA")){
toRemove.add(a);
}
}
list.removeAll(toRemove);
//first find out the removed ones
List removedList = new ArrayList();
for(Object a: list){
if(a.getXXX().equalsIgnoreCase("AAA")){
logger.info("this is AAA........should be removed from the list ");
removedList.add(a);
}
}
list.removeAll(removedList);