gpt4 book ai didi

java - Function 到 Predicate 的 guava 转换器

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:46:07 24 4
gpt4 key购买 nike

在 Guava 中,转换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);
}
};
}

最佳答案

转换 Function<A, Boolean> 的问题到 Predicate<A>是,而后者可以返回 truefalse , 前者也可以返回 null (当然,实际上会返回 Boolean.TRUEBoolean.FALSE )。

考虑到这一点,您建议的实现实际上可能会抛出 NullPointerException , 如果函数恰好返回 null对于某些输入,这不是您可以简单地使用类型系统来防止的。

修改您的建议:

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

当然,您可以使用 Predicates.compose :

Predicate<T> predicate = Predicates.compose(
Predicates.equalTo(Boolean.TRUE), function);

对于你想治疗的情况null作为false , 或者

Predicate<T> predicate = Predicates.not(Predicates.compose(
Predicates.equalTo(Boolean.FALSE), function));

对于你想治疗的情况null作为true .

关于java - Function<T, Boolean> 到 Predicate<T> 的 guava 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24306528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com