【发布时间】:2018-01-30 14:56:22
【问题描述】:
我需要使用基于布尔函数的谓词来组合流操作。通过将方法的参数重新抛出为谓词找到了解决方法,如下所示:
public <T> Predicate<T> pred(final Predicate<T> aLambda) {
return aLambda;
}
public List<String> foo() {
return new ArrayList<String>().stream() //of course, this does nothing, simplified
.filter(pred(String::isEmpty).negate())
.collect(Collectors.toList());
}
“pred”方法似乎什么都不做,但不是这样:
public List<String> foo() {
return new ArrayList<String>().stream()
.filter((String::isEmpty).negate())
.collect(Collectors.toList());
}
也没有任何在线转换:
public List<String> foo() {
return new ArrayList<String>().stream()
.filter(((Predicate)String::isEmpty).negate())
.collect(Collectors.toList());
}
似乎有效。失败并出现错误
此表达式的目标类型必须是函数式接口
在 'pred(...)' 方法中发生了什么奇妙的转换?
【问题讨论】:
标签: java java-8 predicate functional-interface