使用lambdaj过滤集合

Qri*_*Qri 6 java collections filtering lambdaj

我有两个类:

public class Order{
    private Integer id;
    private List<Position> positions;
    ...
}

public class Position{
    private Integer id;
    private String content;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我有一个包含订单的列表,并希望获得具有特定内容的所有订单.目前我这样做:

List<Order> orders = ... ;

List<Order> outputOrders = ... ;
for(Order order : orders){
    if(select(order.getPositions(), having(on(Position.class).getContent(),equalTo("Something"))).size() != 0){
        outputOrders.add(order);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用lambdaj有更好的方法吗?

提前致谢.

lon*_*hua 3

这个怎么样:使用org.hamcrest.Matchers.hasItem

List<Order> outputOrders =
        filter(having(on(Order.class).getPositions(),
                      hasItem(having(on(Position.class).getContent(),
                                     equalTo("Something")))),
               orders);
Run Code Online (Sandbox Code Playgroud)