0

我正在学习 LambdaJ,每次我需要完成一项任务时,我都必须检查现有示例并修改它们以使用 lambdaj。

我已经开始使用它,但我想我在这里遗漏了一些想问你的东西。

我不清楚使用having方法。我不明白它是如何工作的以及如何使用它。

我已经调试、反编译并阅读了它的文档,但我没有找到“思维方式”lambda。

havingjavadoc 说:

静态 HasArgumentWithValue 有(一个参数,org.hamcrest.Matcher 匹配器)

如果给定参数的值满足传递的匹配器定义的条件,则创建一个 hamcrest 匹配器,该匹配器被评估为 true。

having在这样的例子中使用过:

List<User> result = filter(having(on(User.class).getAge(), greaterThan(20)), list);

我知道having将harmcrest匹配器应用于参数并在整个列表中重复。

但我的问题是拥有如何运作?我如何以函数式的方式思考 lambdaj?

4

1 回答 1

0

您的代码描述可能如下所示:

the function filter take each user from list and 
 apply it over function having 
   that retrieved the age and compare with value of 20. 

这可以写成

private List<User> filter(List<User> users) {
    final List<User> filtered = new ArrayList<>();
    for(User user : users) {
       if(having(user.getAge(),greaterThan(20)) {
          filtered.add(user);
       }
    }
    return filtered;
}


private boolean having(Integer age,  org.hamcrest.Matcher<Integer> matcher) {

   return matcher.matcher(age);
}

换句话说,函数有两个参数,一个值和匹配器,并根据值评估匹配器。并且 value 参数由函数过滤器传递,该过滤器期望结果为布尔值。

于 2014-05-29T23:33:54.337 回答