2013-03-18 11 views
5

mam dwie klasy tak:kolekcje do filtrowania lambdaj

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

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

Teraz mam listę zleceń i chcesz uzyskać wszystkie rozkazy, które mają pozycje z określoną treścią. W tej chwili robię to w ten sposób:

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

Czy jest lepszy sposób na zrobienie tego z lambdajem?

Z góry dziękuję.

Odpowiedz

3

Co z tego: używać org.hamcrest.Matchers.hasItem?

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

Świetne rozwiązanie! +1 – gontard

+0

Idealny. Dziękuję Ci! – Qri