CUBは子供の白熊

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

第2章 ストリーム API の使い方 : 問題 2 : limit メソッド

問題 2

長い単語のうち最初の5個だけ求める処理を、ストリーム API を使って以下のように書いた。

words.stream()
    .filter(w -> w.length() > 12)
    .limit(5)
    .forEach(System.out::println);

この処理で、5番目の長い単語が見つかったらlimitメソッドの前の中間操作が呼び出されないことを確認せよ

解答

■ 確認用のコード

words.stream()
    .filter(w -> { System.out.println("word is " + w); return w.length() > 12; })
    .limit(5)
    .forEach(System.out::println);

確かに、5番目の長い単語が見つかったらfilterメソッドは呼ばれていない。
ストリームのパイプラインは、後ろの処理から実行されているということですね。