2016-08-22 2 views
-1

У меня есть список объектов, которые содержат список объектов, и я хочу получить один из элементов в контейнере. Возможно ли это сделать с лямбдой или просто нужно гнездиться для петель?Java 8 Фильтрация списка в списке

Вот текущий метод я использую для поиска элемента:

for (Container c : containers) { 
    for (Item i : c.getItems() { 
     if (i.getKey().equals(key)) return i; 
    } 
} 
+1

Что-то вроде 'container.stream(). FlatMap (c -> c.getItems(). Stream()). Filter (i -> i.getKey(). Equals (key)). FindFirst(). OrElse (null); ' –

+0

@ Jean-FrançoisSavard Я не видел вашего комментария. –

ответ

6

Уплотненных для петель работает хорошо. Если вы хотите сделать это с помощью потоков, вы можете сделать это:

containers.stream() 
      .flatMap(c -> c.getItems().stream()) 
      .filter(i -> i.getKey().equals(key)) 
      .findFirst(); 

Это возвращает Optional, содержащий Item, если он был найден, или пустой Optional иначе.

+0

спасибо, это именно то, что я искал. –

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