私は配列にする必要があります:arrA
とarrB
。 arrA
およびarrB
は、異なるタイプのオブジェクトのリストであり、add
関数は、オブジェクトA
をオブジェクトB
に変換します。 arrAからarrBまでの各オブジェクトを追加し、そのオブジェクトをarrAから削除したいと思います。イムは、ストリームでこれをやろうとしている:私はこれを実行するとforeachメソッドでストリームからオブジェクトを削除する方法は?
arrA.stream().foreach(c -> {arrB.add(c); arrA.remove(c);});
、二つのことが起こっている:
- すべてのオブジェクトがARRAからarrBに渡されません。
- 数回の反復の後に、NULLポインタ例外がスローされます。
iは、アレイをコピーすることによって、私はこれを解決する可能性が今
(arrB
に渡され、奇数インデックスの下でのみオブジェクト)配列の長さはそれぞれremove()
呼び出し後に減少され、反復カウンタが増加されるので、それはですgues 1つのストリームコールをしてから2番目のストリームコールでオブジェクトを削除しますが、これは私のために正しいようです。
この問題を解決するにはどうすればよいですか?
EDIT。 追加情報: 実際の実装では、以前に切り抜いたリスト(arrC, arrD
など)に切り抜いた条件を満たす要素を追加する
arrA.stream().filter(some condition).foreach(c -> {arrB.add(c); arrA.remove(c);});
とそのと呼ばれる数回濾過が、各オブジェクトは1つのリストだけ
を上に置くことができた場合、このリスト
オブジェクトを1つずつ追加したり削除したりする必要がありますか? 1つのメソッド呼び出しでリスト全体をクローンし、もう一方をクリアすることはできますか? –
とにかく 'arrA.remove'のポイントは何ですか?それは空で終わるつもりです、それは不変です。 –
が追加されました。簡潔に説明して編集しました。なぜ要素を1つずつ削除する必要がありますか? –