Mens jeg går gjennom en liste, vil jeg fjerne et element i en liste avhengig av en betingelse. Se koden nedenfor.
Dette gir meg et ConcurrentModification
unntak.
for (Object a : list) {
if (a.getXXX().equalsIgnoreCase("AAA")) {
logger.info("this is AAA........should be removed from the list ");
list.remove(a);
}
}
Hvordan kan dette gjøres?
Du kan ikke og bør ikke endre en liste mens du itererer over den. Du kan løse dette ved å lagre objektene som skal fjernes midlertidig:
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);