在Java8中,可以使用方法引用来过滤流,例如:
Stream<String> s = ...; long emptyStrings = s.filter(String::isEmpty).count();
是否有方法创建一个方法引用,该方法引用是对现有方法引用的否定,例如:
long nonEmptyStrings = s.filter(not(String::isEmpty)).count();
我可以创建如下的not方法,但我想知道JDK是否提供了类似的功能。
not
static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }
Predicate.not( … )
java-11提供了一个新的方法谓词
因此可以否定方法引用:
Stream<String> s = ...; long nonEmptyStrings = s.filter(Predicate.not(String::isEmpty)).count();
我计划静态导入以下内容,以便内联使用方法引用:
public static <T> Predicate<T> not(Predicate<T> t) { return t.negate(); }
例如
Stream<String>s=。。。; long nonEmptyStrings=s.filter(not(String::isEmpty)).count();
更新:从Java-11开始,JDK还提供了一个类似的内置解决方案。