gpt4 book ai didi

java - 采用两个单独的过滤标准,使用 Lambdaj

转载 作者:行者123 更新时间:2023-12-02 14:38:22 27 4
gpt4 key购买 nike

使用 Lambdaj,我尝试从列表中分离出满足 2 个单独条件的对象。以下两项都将实现我的目标。一)

    List<SomeObject> someObjectsWithMatchingSomeObjectIds = select(foo.getSomeParentObject().getSomeObjects(), having(on(
SomeObject.class).getId(), equalTo(123)));
SomeObject someObject = selectFirst(someObjectsWithMatchingSomeObjectIds, having(on(SomeObject.class).getLoanTerm(),
notNullValue()));

B)

    SomeObject someObject = selectFirst(select(foo.getSomeParentObject().getSomeObjects(), having(on(SomeObject.class)
.getId(), equalTo(123))), having(on(SomeObject.class).getLoanTerm(), notNullValue()));

第一个似乎更具可读性,特别是对于不熟悉 API 的人来说。第二个似乎利用了 lambdaj 的函数式编程方面,哪个最好?

我认为可读性胜出。但是,我想知道,使用 LambdaJ 过滤集合时是否有更简洁的方法来处理两个单独的条件?

最佳答案

删除中间定义并不“更符合任何事物的精神”,而且通常会损害可读性。拥有中间定义有助于使程序的每一行更易于阅读,并且当您可以为标识符指定一个有意义的名称时,可以提供很大的可读性帮助 - 不确定代码中是否确实如此。

我认为,通过不应用两个过滤操作(select,然后 selectFirst),而是仅使用一个组合两个匹配条件的操作,您可以赢得可读性带有 (注意,代码未经测试):

SomeObject someObject = selectFirst(foo.getSomeParentObject().getSomeObjects(),
and(having(on(SomeObject.class).getId(), equalTo(123)),
having(on(SomeObject.class).getLoanTerm(), notNullValue()));

关于java - 采用两个单独的过滤标准,使用 Lambdaj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11115614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com