【问题标题】:How does Lambdaj having work?Lambdaj 是如何工作的?
【发布时间】:2014-05-30 07:33:54
【问题描述】:

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

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

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

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

havingjavadoc 说:

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

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

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

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

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

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

【问题讨论】:

    标签: java lambdaj


    【解决方案1】:

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

    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 参数由函数过滤器传递,该过滤器期望结果为布尔值。

    【讨论】:

    • 很好的解释。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2016-11-13
    • 2017-10-11
    • 2021-10-13
    • 2011-02-24
    • 2013-11-16
    相关资源
    最近更新 更多