2016-11-29 2 views
5

私は、Javaストリームを使用してフィルタリングを学習しています。 フィルタリング後のストリームは何も印刷しません。 フィルタメソッドが実行されていないと思います。 次のように私のフィルタリングコードは次のとおりです。Java 8ストリーム - フィルタメソッドが実行されないのはなぜですか?

Stream.of("d2", "a2", "b1", "b3", "c") 
    .filter(s -> { 
     s.startsWith("b"); 
     System.out.println("filter: " + s); 
     return true; 
    }); 

コンパイル・エラーとも例外なくはありません。 提案がありますか?

答えて

12

filterは中間操作であり、ストリームパイプラインがターミナル操作で終了した場合にのみ実行されます。例えば

Stream.of("d2", "a2", "b1", "b3", "c") 
    .filter(s -> { 
     s.startsWith("b"); 
     System.out.println("filter: " + s); 
     return true; 
    }) 
    .forEach (System.out::println); 

そのまま、あなたのフィルタ方法は、それが常にtrueを返すので、無駄であり、したがって、何らフィルタリングを実行しません。

関連する問題