package summaryjava.util.stream
の状態次のように:マッピング動作が行われた場合、のJavaストリームステートフルな動作例
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...
:
ステートフル・ラムダの例は、で
map()
のパラメータであります並行して、同じ入力に対する結果はスレッドスケジューリングの違いにより実行ごとに異なることがありますが、ステートレスラムダ式では結果は常に同じになります。
なぜ、これは、セットが同期され、一度に1つの要素しか処理できないので、一貫した結果をもたらさないことは理解できません。並列化によって結果がどのように異なるかを示す方法で上記の例を完了できますか?
私は、パラレルストリームがまだエンカウンターオーダーを保持できることを忘れています。ありがとう! – shmosel
Btw、それは見えない要素をゼロにしているので、結果に3つの0があります。 – shmosel
@shmoselうわー、 'if'の方向を後方に持っています。今修正されました。 – Douglas