Project Lambdaが策定された大きな理由としてパラレル処理があるのは、本連載の「Java SE 8、Stream APIの基本を理解する」で述べた通りです。

 ストリームでパラレル処理を行うには、パラレル処理用のストリームを使用します。しかし、パラレル処理用のストリームの型はjava.util.stream.Streamインタフェースなどで、シーケンシャルなストリームと変わりません。

 つまり、パラレルストリームさえ準備できれば、今まで説明してきたストリームと同じように使うことができるのです。もちろん、パラレル処理なので、全てがシーケンシャルな処理と同じというわけにはいきません。

 そこで、今回はパラレルストリームの生成や基本的な使い方から、パラレルストリームを使う上での注意点まで説明していきます。

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

 パラレルストリームの生成には2種類の方法があります。一方がソースから直接パラレルストリームを生成する方法、もう一方がシーケンシャルなストリームからパラレルストリームを生成する方法です。

 双方を順に説明していきましょう。

ソースからパラレルストリームを生成

 ソースの型がjava.util.Collectionインタフェースであれば、ソースからパラレルストリームを生成できます。

 Collectionインタフェースでシーケンシャルストリームを生成するにはstreamメソッドを使用しましたが、パラレルストリームを生成するにはparallelStreamメソッドを使用します。

 

リスト1●コレクションからパラレルストリームを生成

List<String> list = ……;

// パラレルストリームを生成
Stream<String> parallelStream = list.parallelStream();

 

 リスト1ではCollectionインタフェースのサブインタフェースであるjava.util.Listインタフェースのオブジェクトから、赤字で示したparallelStreamメソッドを使用してパラレルストリームを生成しています。

 前述したように、パラレルストリームといってもシーケンシャルなストリームと型は同じです。リスト1でもparallelStreamメソッドで生成したパラレルストリームの型はStreamインタフェースになっています。

 StreamインタフェースにはパラレルストリームであるかどうかをチェックするisParallelメソッドも定義されています。しかし、ストリームはメソッドチェーンで使用することが多いため、isParallelメソッドを使用できる場面は少ないはずです。

 コードを記述する時に、パラレルなのかシーケンシャルなのかよく注意して記述するようにしましょう。

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

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