一尘不染

Java 如何否定方法引用谓词

java

在Java8中,可以使用方法引用来过滤流,例如:

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); }

阅读 387

收藏
2020-03-21

共2个答案

一尘不染

Predicate.not( … )

java-11提供了一个新的方法谓词

因此可以否定方法引用:

Stream<String> s = ...;
long nonEmptyStrings = s.filter(Predicate.not(String::isEmpty)).count();
2020-03-21
一尘不染

我计划静态导入以下内容,以便内联使用方法引用:

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还提供了一个类似的内置解决方案。

2020-03-21