Predicate.not()による否定
ラムダラッパーを書く代わりにPredicate.not()でメソッド参照をクリーンに否定する。
コード比較
✕ Java 8
List<String> nonEmpty = list.stream()
.filter(s -> !s.isBlank())
.collect(Collectors.toList());
✓ Java 11+
List<String> nonEmpty = list.stream()
.filter(Predicate.not(String::isBlank))
.toList();
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
クリーンな否定
否定するためだけにメソッド参照をラムダでラップする必要がありません。
組み合わせ可能
任意のPredicateで動作し、クリーンな述語チェーンを実現します。
自然に読める
Predicate.not(String::isBlank)は英語のように読めます。
旧来のアプローチ
ラムダによる否定
モダンなアプローチ
Predicate.not()
JDKバージョン
11
難易度
初級
JDKサポート
Predicate.not()による否定
利用可能
JDK 11(2018年9月)以降、利用可能
仕組み
Java 11以前は、メソッド参照を否定するためにラムダでラップする必要がありました。Predicate.not()を使えば任意の述語を直接否定でき、コードの可読性を保ちつつ、ストリームパイプライン全体でメソッド参照スタイルを一貫して使用できます。
関連ドキュメント