今まで扱ってきたストリームはすべてシーケンシャルに処理を行うストリームでした。

 しかし、本連載の第2回で記述したように、Project Lambdaの導入理由はパラレル処理にあります。そこで、今月は満を持してパラレルストリームについて紹介していきます。

 パラレル処理といっても、パラレルストリームの場合、いくつかの約束を守っていればそれほど難しいことはありません。

 早速、試してみましょう。

パラレルストリームの生成

 パラレルストリームといっても、パラレルストリーム用のインタフェースがあるわけではありません。今まで通り、StreamインタフェースもしくはIntStreamインタフェースなどを使用します。

 異なるのは、ストリームを生成するためのメソッドです。

 コレクションからストリームを生成する場合、シーケンシャルなストリームであればstreamメソッドを使用してきました。パラレルストリームの場合、streamメソッドの代わりにparallelStreamメソッドを使用します。

 たとえば、文字列のリストにおいて、"a"で始まる文字列の数を数えるには、リスト1のように記述します。

リスト1 パラレルストリームの例

        List<String> texts = ...;
        
        long result = texts.parallelStream()
                           .map(s -> s.trim())
                           .filter(s -> s.startsWith("a"))
                           .count();

 赤字で示したようにparallelStreamメソッドでストリームを生成しています。その後は、通常のストリームと同様に処理を行います。

 ソースがコレクションではない場合、たとえば配列などは直接パラレルストリームを生成することはできません。その代わりに、通常のストリームからパラレルストリームへの変換メソッドであるparallelメソッドが提供されています。

この先は会員の登録が必要です。今なら有料会員(月額プラン)が4月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら