使用lambdaj过滤集合

时间:2013-03-18 08:43:14

标签: java collections filtering lambdaj

我有两个类:

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

public class Position{
    private Integer id;
    private String content;
    ...
}

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

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);
    }
}

使用lambdaj有更好的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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