2016-06-27 9 views
-1

以下は同時リストの変更の私の問題を示しているいくつかのコード(明確にするため、それの多くを削除)でありますしかし、forループで使用されているものとは異なるリストにあります。同時一覧変更

これを防ぐ方法を教えてください。

+0

あなたは最終的に週を除外すると宣言したのはなぜですか? – saravanakumar

+1

私はeclipseを設定して、変更されていない変数を保存時に自動的に設定します。私はポイント奇妙なエラーをピンで止めると便利だとわかります。 –

答えて

2

は、実際の要素を削除する前に、新しいリストにそれをコピーします。

List<Week> weeksExcludingThisWeek = new ArrayList<>(this.demand.getWeeks().getAllWeeks()); 

あなたが現在あなたが反復されているのと同じリストから週削除されています。

+0

パーフェクト、それはそれを修正しました。ありがとう、アンディ、私は8分であなたの答えを受け入れるでしょう。 –

1

ここでは、ループ変数weeksExcludingThisWeekためweek変数と内部の反復の両方のためにthis.demand.getWeeks().getAllWeeks() を使用しています。

2つのオブジェクトで同じ参照が問題です。ループ内で現在の反復オブジェクトを変更することはできませんでした。

ConcurrentModificationException

は、ドキュメントを見てください避けるために、ループ内new ArrayList(this.demand.getWeeks().getAllWeeks())

2

使用イテレータを新しいオブジェクトを作成します。https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

あなたが見つける:

イテレータは、発信者を許可します定義済みのセマンティクスを使用して、反復中に基本となるコレクションから要素を削除する

+0

私には新感謝、情報ありがとう! – saravanakumar