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

Java 采用两个单独的过滤标准,使用Lambdaj,java,functional-programming,filtering,lambdaj,Java,Functional Programming,Filtering,Lambdaj,使用Lambdaj,我试图从一个列表中分离出一个满足两个独立条件的对象。以下两项都将实现我的目标。 A) 第一个似乎更具可读性,特别是对于不熟悉API的人来说。第二个似乎利用了lambdaj的函数编程方面,哪一个最好 我想可读性会赢。然而,我想知道,在使用LambdaJ过滤集合时,有没有更简洁的方法来处理两个不同的条件?删除中间定义并不是“更符合”任何东西的精神,而且通常会损害可读性。拥有一个中间定义有助于使程序的每一行更易于阅读,并且当您可以为标识符指定一个有意义的名称时,它会是一个非常好的可

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

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


我想可读性会赢。然而,我想知道,在使用LambdaJ过滤集合时,有没有更简洁的方法来处理两个不同的条件?

删除中间定义并不是“更符合”任何东西的精神,而且通常会损害可读性。拥有一个中间定义有助于使程序的每一行更易于阅读,并且当您可以为标识符指定一个有意义的名称时,它会是一个非常好的可读性帮助——不确定代码中是否真的是这样

我认为,通过不应用两个过滤操作,
select
然后
selectFirst
,而只使用一个操作,将两个匹配条件与
结合起来,您可以赢得可读性(注意,代码未测试):


谢谢你的回复!这个“和”功能似乎正是我想要的。你能给我寄一个包裹吗?它是hamcrest还是lambdaj?还有,“当您可以给标识符一个有意义的名称时——不确定代码中是否真的是这样。”。严厉的显然,我已经更改了此帖子的对象名称:)。再次感谢您的帮助。我正在考虑Lambdaj中类的静态构造函数
    List<SomeObject> someObjectsWithMatchingSomeObjectIds = select(foo.getSomeParentObject().getSomeObjects(), having(on(
            SomeObject.class).getId(), equalTo(123)));
    SomeObject someObject = selectFirst(someObjectsWithMatchingSomeObjectIds, having(on(SomeObject.class).getLoanTerm(),
            notNullValue()));
    SomeObject someObject = selectFirst(select(foo.getSomeParentObject().getSomeObjects(), having(on(SomeObject.class)
            .getId(), equalTo(123))), having(on(SomeObject.class).getLoanTerm(), notNullValue()));
SomeObject someObject = selectFirst(foo.getSomeParentObject().getSomeObjects(),
                                    and(having(on(SomeObject.class).getId(), equalTo(123)),
                                        having(on(SomeObject.class).getLoanTerm(), notNullValue()));