Lambdaj是如何工作的



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

我已经开始使用了,但是我觉得我遗漏了一些东西,我想问你。

我不清楚使用having方法。我不知道它是怎么工作的,也不知道怎么用。

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

having javadoc说:

static HasArgumentWithValueorg.hamcrest.Matcher匹配器

创建一个hamcrest匹配器如果给定参数的值满足条件由传递的匹配器定义。

我在这样的例子中使用了having:

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

我理解having对一个参数应用了一个harmcrest匹配器,并在整个列表中重复。

但我的问题是如何工作?如何用函数的方式来考虑?

您的代码的描述可以像这样:

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

换句话说,函数有两个参数,一个值和匹配器,并根据值计算匹配器。值参数是通过函数过滤器传递的,它期望结果为布尔值。

相关内容

  • 没有找到相关文章

最新更新