2013-03-18 4 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); 
    } 
} 

Есть ли лучший способ сделать это с помощью лямбдай?

Заранее спасибо.

ответ

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

+0

Отлично. Спасибо! – Qri

Смежные вопросы