Mientras recorro una lista, me gustaría eliminar un elemento de una lista dependiendo de una condición. Vea el código siguiente.
Esto me da una excepción ConcurrentModification
.
for (Object a : list) {
if (a.getXXX().equalsIgnoreCase("AAA")) {
logger.info("this is AAA........should be removed from the list ");
list.remove(a);
}
}
¿Cómo se puede hacer esto?
No se puede ni se debe modificar una lista mientras se itera sobre ella. Esto se puede solucionar guardando temporalmente los objetos a eliminar:
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);