CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第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倍速い。