2011-12-21 3 views
2

を上げることなくArrayListのから要素を削除するコードは次のとおりです。彼らは別のものに存在している場合はここにConcurrentModificationException

Ledger obj = null; 
MyUtilPojo obj1 = null; 
Iterator it = toList.iterator(); 
while (it.hasNext()) { 
    obj = (Ledger) it.next(); //after first iteration next here produce an error 
    Iterator it1 = moreToList.iterator(); 
    while (it1.hasNext()) { 
     obj1 = (MyUtilPojo) it1.next(); 
     if (obj.getId() == obj1.getKey()) { 
      toList.remove(obj);         
     } 
    } 
} 

このエラーConcurrentModificationExceptionを上げ、誰かが助けることができますか?

+0

も参照してください。http://stackoverflow.com/a/4103007/180100 –

+0

行う 'it.remove()' – irreputable

答えて

0

ような何かが動作するはずです(一時リストにtoListのための新しいコンテンツを作成):イテレータのリストを横断しながら、あなたは(要素を追加または削除して)リストを変更する場合

final List<Ledger> target = new ArrayList<Ledger>(); 
for (final Ledger led : toList) { 
    for (final MyUtilPojo mup : moreToList) { 
     if (led.getId() != mup.getKey()) { // beware of != 
      target.add(led); 
     } 
    } 
} 

toList = target; 
0

にConcurrentModificationExceptionが発生します。

Ledger obj = null; 
    MyUtilPojo obj1 = null; 
    List thingsToBeDeleted = new ArrayList(); 

    Iterator it = toList.iterator(); 
    while (it.hasNext()) { 
     obj = (Ledger) it.next(); 
     Iterator it1 = moreToList.iterator(); 
     while (it1.hasNext()) { 
      obj1 = (MyUtilPojo) it1.next(); 
      if (obj.getId() == obj1.getKey()) { 
       thingsToBeDeleted.add(obj); // put things to be deleted        
      } 
     } 
    } 
    toList.removeAll(thingsToBeDeleted); 
+0

さらに良いことに、toList.removeAll(thingsToBeDeleted)との最後の3行を置き換えます。 – user949300

+0

@ user949300非常に真実:)。提案されているようにコードを修正しました。 – sasankad

関連する問題