Listeden öğe kaldırma

Bir liste içinde döngü yaparken, bir koşula bağlı olarak listedeki bir öğeyi kaldırmak istiyorum. Aşağıdaki koda bakınız.

Bu bana bir ConcurrentModification istisnası veriyor.

for (Object a : list) {
    if (a.getXXX().equalsIgnoreCase("AAA")) {
        logger.info("this is AAA........should be removed from the list ");
        list.remove(a);
    }
}

Bu nasıl yapılabilir?

Çözüm

Iteratorkullanmanız vefordöngüsü kullanmak yerineiteratorüzerinderemove()` çağırmanız gerekir.

Yorumlar (0)

Bir liste üzerinde yineleme yaparken onu değiştiremezsiniz ve değiştirmemelisiniz. Bunu, kaldırılacak nesneleri geçici olarak kaydederek çözebilirsiniz:

List toRemove = new ArrayList();
for(Object a: list){
    if(a.getXXX().equalsIgnoreCase("AAA")){
        toRemove.add(a);
    }
}
list.removeAll(toRemove);
Yorumlar (2)
//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);
Yorumlar (3)