Terwijl ik door een lijst loop, wil ik een item uit een lijst verwijderen afhankelijk van een voorwaarde. Zie de code hieronder.
Dit geeft me een ConcurrentModification
exceptie.
for (Object a : list) {
if (a.getXXX().equalsIgnoreCase("AAA")) {
logger.info("this is AAA........should be removed from the list ");
list.remove(a);
}
}
Hoe kan dit gedaan worden?
Je kunt't en zou't een lijst niet moeten wijzigen terwijl je er overheen loopt. Je kunt dit oplossen door de te verwijderen objecten tijdelijk op te slaan:
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);