2013-03-18 70 views
5

過濾集合我有兩個類這樣的:與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?

在此先感謝。

回答

3

這個怎麼樣:用org.hamcrest.Matchers.hasItem

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

偉大的解決方案! +1 – gontard 2013-03-18 10:37:45

+0

完美。謝謝! – Qri 2013-03-18 10:52:44