1

リストに含まれるクラス Choice のオブジェクトがあります。

チョイスはこんな感じ。

public class Choice extends MorphiaModel{   
    public String name;
    public Double price;
}

それらのいくつかは空です。つまり、名前は "" で、価格は null です。

これらの空の値を削除したい。

リストを反復処理して空の Choice オブジェクトを削除しようとしましたが、ConcurrentModificationException が発生し、(equals と hashcode を実装した後に)これを実行しましたが、機能しません。空の値がまだ残っています。

注: option.choices は Choice オブジェクトのリストです

Choice emptyChoice = new Choice();
    emptyChoice.name = "";
    emptyChoice.price = null;

    option.choices.remove(emptyChoice);
4

2 に答える 2

8

これは、リストの反復処理ConcurrentModificationExceptionの外側にある要素を削除しようとしたために発生しました。Iterator

このようなものは動作します:

Iterator<Choice> iterator = option.choices.iterator(); // or use option.choices.listIterator()

while (iterator.hasNext()) {
    if (emptyChoice.equals(iterator.next())) {
        iterator.remove();
    }
}
于 2012-06-23T11:08:42.927 に答える
2

次に、これを行いました(equalsとhashcodeを実装した後)が、機能しません。空の値がまだ残っています

List.remove()一致する最初の要素 (インデックスが最も小さい要素) のみを削除します。それらをすべて削除するには、ループに入れることができます(成功した場合remove()はブール値を返します):true

while ( option.choices.remove(emptyElement) );
于 2012-06-23T11:15:13.257 に答える