リスト内の各単語の出現回数をカウントする以下の簡単な例を参照してください。
Stream<String> words = Stream.of("a", "b", "a", "c");
Map<String, Integer> wordsCount = words.collect(toMap(s -> s, s -> 1,
(i, j) -> i + j));
最後に、wordsCount
です{a=2, b=1, c=1}
。
しかし、私のストリームは非常に大きく、ジョブを並列化したいので、次のように書きます:
Map<String, Integer> wordsCount = words.parallel()
.collect(toMap(s -> s, s -> 1,
(i, j) -> i + j));
wordsCount
ただし、それは単純なことに気付いたHashMap
ので、スレッドの安全性を確保するために同時実行マップを明示的に要求する必要があるかどうか疑問に思います。
Map<String, Integer> wordsCount = words.parallel()
.collect(toConcurrentMap(s -> s, s -> 1,
(i, j) -> i + j));
非同時コレクターを並列ストリームで安全に使用できますか? または、並列ストリームから収集する場合は同時バージョンのみを使用する必要がありますか?