2016-04-20 1 views
1

У меня возникли проблемы с пониманием потоков. Я огляделся и не могу найти пример, который соответствует моему варианту использования.Преобразование вложенных для циклов в потоки

Я существующий вложенный цикл:

List<ObjectB> objectBs = new ArrayList<ObjectB>(); 
for (ObjectA objA: objectAList) { 
    for (ObjectB objB: objA.getObjectBList()) { 
     if (objB.getNumber() != 2) { 
      objectBs.add(objB); 
     } 
    } 
} 

МНОГО exampls показать, как добавить objB.getNumber() к списку, но не objB.

ответ

7

Вы можете использовать flatMap для получения Stream<ObjectB> всех ObjectB экземпляров и фильтровать ObjectB «S требуемого числа:

List<ObjectB> objectBs = 
    objectAList.stream() 
       .flatMap (a -> a.getObjectBList().stream()) 
       .filter (b -> b.getNumber() != 2) 
       .collect (Collectors.toList()); 
Смежные вопросы