2013-03-18 24 views
5

Filtering Tôi có hai lớp học như thế:bộ sưu tập với lambdaj

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

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

Bây giờ, tôi có một danh sách với đơn đặt hàng và muốn có được tất cả các đơn đặt hàng có vị trí với nội dung cụ thể. Hiện tại tôi làm như vậy:

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

Có cách nào tốt hơn để làm điều đó với lambdaj?

Xin cảm ơn trước.

Trả lời

3

Điều gì về điều này: sử dụng org.hamcrest.Matchers.hasItem?

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

Giải pháp tuyệt vời! +1 – gontard

+0

Hoàn hảo. Cảm ơn bạn! – Qri