1. ホーム
  2. java

[解決済み] メソッド参照述語を否定する方法

2022-03-24 01:38:36

質問

Java 8 では、ストリームをフィルタリングするために、例えばメソッド参照を使用することができます。

Stream<String> s = ...;
long emptyStrings = s.filter(String::isEmpty).count();

既存のメソッドの否定であるメソッド参照を作成する方法はありますか、すなわち、次のようなものです。

long nonEmptyStrings = s.filter(not(String::isEmpty)).count();

を作成することができました。 not というメソッドがありますが、JDKが同様のものを提供しているかどうか気になりました。

static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }

解決方法は?

Predicate.not( … )

ジャバ11 は新しいメソッドを提供します。 述語#not

つまり、メソッドの参照を否定することができるわけです。

Stream<String> s = ...;
long nonEmptyStrings = s.filter(Predicate.not(String::isEmpty)).count();