Java 如何否定lambda谓词?

Java 如何否定lambda谓词?,java,lambda,java-8,predicate,Java,Lambda,Java 8,Predicate,假设我有一个字符串流 最终流=。。。; 我想在修剪后过滤掉每个空字符串 stream .filter(Objects::nonNull) .map(String::trim) .filter(v -> !v.isEmpty()); 有没有办法申请更换v->!v、 isEmpty()零件 .filter(((谓词)String::isEmpty).negate()//不编译 您必须执行.filter(((谓词)String::isEmpty).negate())

假设我有一个字符串流

最终流=。。。;
我想在修剪后过滤掉每个空字符串

stream
    .filter(Objects::nonNull)
    .map(String::trim)
    .filter(v -> !v.isEmpty());
有没有办法申请更换
v->!v、 isEmpty()
零件

.filter(((谓词)String::isEmpty).negate()//不编译

您必须执行
.filter(((谓词)String::isEmpty).negate())

如果需要,可以定义

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

但我会坚持使用
v->!v、 isEmpty()

似乎您必须强制转换为
谓词才能使其工作:

.filter(((Predicate<String>) (String::isEmpty)).negate())

使用实用程序库,而不是自己创建类。它有很多:
当然:

import static com.diffplug.common.base.Predicates.not;

stream
.filter(Objects::nonNull)
.map(String::trim)
.filter(not(String::isEmpty));

您还可以执行
返回p.negate()
.filter(s -> ! s.isEmpty())
import static com.diffplug.common.base.Predicates.not;

stream
.filter(Objects::nonNull)
.map(String::trim)
.filter(not(String::isEmpty));