1

リストから要素を除外したいとします。このコードを実行すると、ループ中にリストが変更されるため、同時実行例外のようなものがトリガーされます。

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

// Add instances to list here ...

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

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

4

3 に答える 3

3

最良の方法はiterator.remove()を使用することです

于 2012-05-02T18:22:13.850 に答える
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

于 2012-05-02T18:29:42.913 に答える
1

あなたの場合、手動で反復を行わなくてもソリューションを使用できます(removeAllがこれを処理します)。

aList.removeAll("apple");

リストからすべての「アップル」要素を削除します。

于 2012-05-02T18:27:29.107 に答える