第2章 ストリーム API の使い方 : 問題 3 : 並列ストリーム
問題 3
ストリーム API で書いた、長い単語の数を求める処理
long count = words.stream() .filter(w -> w.length() > 12) .count();
でstream
ではなくparallelStream
を使って並列でカウントした場合の速度の違いを計測せよ
解答
■ 計測用のコード
long start = System.nanoTime(); long count = words.stream() .filter(w -> w.length() > 12) .count(); System.out.println("所要時間 : " + (System.nanoTime() - start) / (1000.0 * 1000.0) + "msec");
parallelStream
を使って並列実行した場合の計測用コードも同様で
long start = System.nanoTime(); long count = words.parallelStream() .filter(w -> w.length() > 12) .count(); System.out.println("所要時間 : " + (System.nanoTime() - start) / (1000.0 * 1000.0) + "msec");
■ 私の環境での計測結果
計測する単語の数に依存する。
不思議の国のアリス(単語数=30,420)の場合は、単独実行が18倍速い。
戦争と平和(単語数=575,343)の場合は、並列実行が1.4倍速い。