PR

 したがって、パラレルストリームから外部の変数にアクセスすることはなるべく避けるようにするのが賢明です。もしアクセスしたとしても状態を持たないイミュタブルな変数などの参照に限定し、状態を変更するような処理は行わないようにします。

 できれば、シーケンシャルなストリームであっても、なるべく外部の変数へのアクセスを行わないようにすることをお勧めします。

 ではリスト11を外部の変数にアクセスしない形式に変更してみましょう。

リスト12 パラレルストリームで閉じた合計処理

    private long sum(List<Long> numbers) {
        return numbers.parallelStream()
                      .mapToLong(x -> x)
                      .sum();
    }

 LongStreamインタフェースがsumメソッドを提供しているので、それを使用するのが簡単です。その他にもcollectメソッドを使用する方法や、reduceメソッドを使用する方法などもあります。

 このように、ストリームに閉じた処理にすることで、パラレルストリームのパフォーマンスを劣化させることなく処理することができます。

終わりに

 今回はパラレルストリームの使用法と、使用する際の注意点について解説しました。

 今回あげた注意点を守れば、パラレルストリームを使用することで簡単にパフォーマンスを向上させることができるはずです。

 たとえば、パラレルストリームが威力を発揮する例として、統計処理などの数値演算があります。特に要素数が多い場合はパラレルストリームの使用を検討してもいいと思います。

 さて、次回はProject Lambdaをいったんお休みして、JavaOneのレポートをお送りします。

 そして、JavaOneレポートの後に、もう一度パラレルストリームの仕組みについて紹介する予定です。

今月の櫻庭

前々回の今月の櫻庭に、JavaOneの後にナパに行く予定だと書きました。

そして、実際にナパに行ってきました。懸念していた地震の影響ですが、まったく感じることはありませんでした。今回は2件のワイナリーに行ったのですが、どちらも多くのお客さんが来てテイスティングを楽しんでいる様子でした。

私は飲まないので、楽しみはランチ。今回はSolbarというオーベルジュのレストランに行ってみました。テラスで食べるランチはとても気持ちがよく、もちろん料理もおいしく、楽しい時間をすごすことができました。

来年もぜひ訪れたいですね。

Robert Mondavi Winery ロバート・モンダヴィ・ワイナリー

Solbar Solbarでのランチ