2012-05-02 14 views
1

リストから要素をフィルタリングしたいとします。このコードを実行すると、リストとして同時実行例外のようなものは、ループ中に変更されているトリガー:リストから要素をフィルタリングする

List<String> aList = new ArrayList<String>(); 

// Add instances to list here ... 

for(String s : aList){ 
    if("apple".equals(s)){ // Criteria 
     aList.remove(s); 
    } 
} 

これ、あなたが他のどのようなアプローチを知っているかを行うための従来の方法は何ですか?

+3

可能重複(http://stackoverflow.com/questions/1196586/calling-remove-in- foreach-loop-in-java) – assylias

答えて

3

最良の方法は、あなたのケースのために)(

+1

@assyliasは、より多くの情報で上記のリンクを掲載しました。 –

1

をiterator.removeを使用することで、あなたは単に手動で任意の反復なしのソリューションを使用することができます(のremoveAllはこれについて面倒を見ます):

aList.removeAll("apple"); 

それは削除されますすべての "apple"要素をリストから削除します。

1

反復している場合や単純な要素のコレクションを持っている場合は、上記の2つに同意してください。条件やオブジェクトがより複雑な場合は、Apache Commons CollectionUtilsのフィルタメソッドを検討してください。このメソッドでは、条件をカプセル化してコレクションの各要素に適用する述語を定義できます。あなたのコレクションのaListと述語のapplePredicateが与えられると、呼び出しのメソッドは次のようになります。

org.apache.commons.collections.CollectionUtils.filter(aList、applePredicate);

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html#filter(java.util.Collection、org.apache.commons.collections.Predicate)Javaでforeachループで除去呼び出し]の

関連する問題