2013-03-18 15 views
5

ho due classi del genere:collezioni filtranti con lambdaj

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

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

Ora, ho una lista con gli ordini e vuole ottenere tutti gli ordini che hanno posizioni con un contenuto specifico. Al momento lo faccio così:

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'è un modo migliore per farlo con lambdaj?

Grazie in anticipo.

risposta

3

Che dire di questo: utilizzare org.hamcrest.Matchers.hasItem?

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

Ottima soluzione! +1 – gontard

+0

Perfetto. Grazie! – Qri