Java Lambdaj是如何工作的?
我正在学习LambdaJ,每当我需要完成一项任务时,我都必须检查现有的示例并修改它们以使用LambdaJ 我已经开始使用它,但我想我遗漏了一些想问你的问题 我不清楚如何使用Java Lambdaj是如何工作的?,java,lambdaj,Java,Lambdaj,我正在学习LambdaJ,每当我需要完成一项任务时,我都必须检查现有的示例并修改它们以使用LambdaJ 我已经开始使用它,但我想我遗漏了一些想问你的问题 我不清楚如何使用have方法。我不明白它是如何工作的,我如何使用它 我已经调试、反编译并阅读了它的文档,但我没有找到“思考方式”lambda 拥有javadoc说: 静态HasArgumentWithValue具有(一个参数, org.hamcrest.Matcher Matcher) 创建一个hamcrest匹配器,该匹配器是 如果给定参数
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(年龄);
}
换句话说,函数有两个参数,一个值和一个匹配器,并根据值对匹配器求值。值参数通过函数过滤器传递,该过滤器期望结果为布尔值。非常好的解释。谢谢。