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