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メソッドを使用できる場面は少ないはずです。

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