Java 功能性番石榴转换器<;T、 布尔值>;断言<;T>;
在番石榴中,将Java 功能性番石榴转换器<;T、 布尔值>;断言<;T>;,java,guava,predicate,Java,Guava,Predicate,在番石榴中,将函数转换为谓词是否方便 在函数中,我可以看到函数forPredicate(Predicate Predicate),但我看不到任何相反的方向 我目前必须自己编写的代码是: public static <T> Predicate<T> functionToPredicate(final Function<T, Boolean> func) { return new Predicate<T>() { @Overri
函数
转换为谓词
是否方便
在函数
中,我可以看到函数forPredicate(Predicate Predicate)
,但我看不到任何相反的方向
我目前必须自己编写的代码是:
public static <T> Predicate<T> functionToPredicate(final Function<T, Boolean> func) {
return new Predicate<T>() {
@Override
public boolean apply(T input) {
return func.apply(input);
}
};
}
公共静态谓词函数topredicate(final Function func){
返回新谓词(){
@凌驾
公共布尔应用(T输入){
返回函数应用(输入);
}
};
}
将函数
转换为谓词
的问题在于后者可以返回真
或假
,前者也可以返回空
(当然,实际上还返回布尔值.true
或布尔值.false
)
考虑到这一点,如果函数恰好为某些输入返回了null
,那么建议的实现实际上可能会抛出NullPointerException
,这不是简单使用类型系统可以避免的
修改您的建议:
public static <T> Predicate<T> functionToPredicate(final Function<? super T, Boolean> function, boolean valueForNull) {
return new Predicate<T>() {
@Override
public boolean apply(T input) {
Boolean value = func.apply(input);
return (value != null) ? value.booleanValue() : valueForNull;
}
}
}
对于您希望将
null
视为true
的情况,我不知道,但您的方法看起来不错!假设Java8:谓词p=func::apply代码>您实际需要这种便利的频率是多少?你为什么不首先把你的函数
写成一个谓词
?
Predicate<T> predicate = Predicates.compose(
Predicates.equalTo(Boolean.TRUE), function);
Predicate<T> predicate = Predicates.not(Predicates.compose(
Predicates.equalTo(Boolean.FALSE), function));