0
Java Stream Cheat SheetJavaストリームは、Javaストリームのために、このチートシートで行く
端末操作でデータを変異させる - 私は、Javaストリームはデータを変異することができないことを理解しています。
たとえば、以下のコードでは、forEachターミナル操作を使用してデータが突然変異していますか?
List<Foo> fooList=new ArrayList<>();
fooList.stream()
.filter(foo-> return foo.getSomeBoolean())
.forEach(foo->{
foo.setSomeBoolean(false);
});
forEachターミナル操作でデータに副作用がありますが、データが変更されることはありませんか?
誰かがforeachがここでデータを突然変異させる方法を説明できますか?
注意:*このデータは変更できません。つまり、元のデータ構造は変更されません。***データソースではなくオブジェクトに変更を加えています。 – shmosel
'java.util.stream.Stream'のdocから:そのソースと、そのソース上で集約して実行される計算操作を宣言的に記述します。 'filter'メソッドでは、Streamを別のStreamに変換し、' forEach'を使用してstreamのすべての要素を繰り返します。 'forEach'は端末操作です。 –
コンパイラが対処していないこと、および実行時に例外がないという事実さえも、特定の操作が許可されていることを証明していません。重要なのは正式な仕様だけです。同じ 'Foo'インスタンスがソース' List'に複数回現れた場合でも、あなたはソースコレクションを変更していませんが、依然として*干渉*する可能性があります。 – Holger