Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lambdaj是如何工作的?_Java_Lambdaj - Fatal编程技术网

Java Lambdaj是如何工作的?

Java Lambdaj是如何工作的?,java,lambdaj,Java,Lambdaj,我正在学习LambdaJ,每当我需要完成一项任务时,我都必须检查现有的示例并修改它们以使用LambdaJ 我已经开始使用它,但我想我遗漏了一些想问你的问题 我不清楚如何使用have方法。我不明白它是如何工作的,我如何使用它 我已经调试、反编译并阅读了它的文档,但我没有找到“思考方式”lambda 拥有javadoc说: 静态HasArgumentWithValue具有(一个参数, org.hamcrest.Matcher Matcher) 创建一个hamcrest匹配器,该匹配器是 如果给定参数

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

我已经开始使用它,但我想我遗漏了一些想问你的问题

我不清楚如何使用
have
方法。我不明白它是如何工作的,我如何使用它

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

拥有
javadoc说:

静态HasArgumentWithValue具有(一个参数, org.hamcrest.Matcher Matcher)

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

我在以下示例中使用了
have

List<User> result = filter(having(on(User.class).getAge(), greaterThan(20)), list);
the function filter take each user from list and 
 apply it over function having 
   that retrieved the age and compare with value of 20. 
List result=filter(具有(on(User.class).getAge(),大于(20)),List);
我知道,
having
将harmcrest匹配器应用于参数,并在整个列表中重复该匹配器


但我的问题是,拥有是如何起作用的?我如何在lambdaj上以功能的方式思考?

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

List<User> result = filter(having(on(User.class).getAge(), greaterThan(20)), list);
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);
}
私有列表过滤器(列表用户){
最终筛选列表=新的ArrayList();
for(用户:用户){
if(具有(user.getAge(),大于(20)){
过滤。添加(用户);
}
}
返回过滤;
}
私有布尔值(整数年龄,org.hamcrest.Matcher Matcher){
返回matcher.matcher(年龄);
}

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

非常好的解释。谢谢。