ソフト開発のトピックス-PR-
詳解 Java SE 8 第16回 パラレルストリーム
今まで扱ってきたストリームはすべてシーケンシャルに処理を行うストリームでした。
しかし、本連載の第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メソッドが提供されています。
連載新着連載目次へ >>
- 詳解 Java SE 8 第15回 Streamと処理の遅延 (2014/10/03)
- 詳解 Java SE 8 第14回 Stream APIのまとめ その2 (2014/09/19)
- 詳解 Java SE 8 第13回 Stream APIのまとめ その1 (2014/09/05)
- 詳解 Java SE 8 第12回 Stream APIその7 (2014/08/22)
この記事に対するつぶやき (自分もつぶやく)
@nikkeibpITpro
この記事に対するfacebookコメント
nikkeibpITpro