Predicates的值提取器

时间:2016-07-08 15:27:57

标签: java function java-8 predicate

在Java 8中,Comparator类使用Function的结果ComparatorFunction组成Comparator Function输入Predicate

我想做的是,能够将Set<Person>个对象与Person等其他类型组合在一起,以使我的代码更具可读性,并使我的功能操作更强大。< / p>

例如,假设public String getName() Personpeople.removeIf(Predicates.andThenTest(Person::getName, String::isEmpty)); 方法。我希望能够过滤掉没有名字的Function个对象。理想情况下,语法如下所示:

Predicate

是否有任何内置方法可以使用Predicate组成extend Function<T, Boolean>我知道really nifty static method但是这对于将函数与其他函数组合起来很有用,遗憾的是,p -> p.getName().isEmpty()并不是Predicate

P.S。我也知道我可以使用像Function这样的lambda,但我希望能够用<input class="contentLink" type="button" value="Questionnaire" onclick="validate(<?php urlencode('/my-site/Tools/Learning_Strategies/Questionnaire.php'); ?>)"/> 组合预先存在的<input class="contentLink" type="button" value="Questionnaire" onclick="validate()"/> 个对象。

2 个答案:

答案 0 :(得分:0)

您可以像Predicate一样投射Function

Predicate<String> p = String::isEmpty;
Function<String, Boolean> g = p::test; // predicate to function
Function<Boolean, String> f = Object::toString;
f.compose(g); // or g.andThen(f);

答案 1 :(得分:0)

对于内置于Java 8中的谓词,没有值提取器方法,但下一个最佳解决方案是自己实现它:

public class Predicates {
    public static <T,R> Predicate<T> andThenTest(
            Function<T,R> func, Predicate<R> pred) {
        return t -> pred.test(func.apply(t));
    }
}

感谢@Holger,也可能是:

return func.andThen(pred::test)::apply;