函数<T,布尔>到谓词<T>
在番石榴中,将Function<T, Boolean>
转换为Predicate<T>
是否方便
在Functions
中,我可以看到Function<T, Boolean> forPredicate(Predicate<T> 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);
}
};
}
# 1 楼答案
将
Function<A, Boolean>
转换为Predicate<A>
的问题在于,后者可以返回true
或false
,前者也可以返回null
(当然,实际上返回Boolean.TRUE
或Boolean.FALSE
)考虑到这一点,如果函数恰好为某些输入返回
null
,那么建议的实现实际上可能会抛出一个NullPointerException
,这不是简单使用类型系统可以避免的修改您的建议:
当然,您可以使用Predicates.compose:
如果您想将
null
视为false
,或对于希望将
null
视为true
的情况