Изучая потоки и лямбды Java 8, я попытался заменить следующие вложенные циклы for на потоки:
List<Long> deskIds = new ArrayList<>();
for(ProvidedService memberService : service.getAllNodesDepthFirst()){
for(Desk d : memberService.getDesks()){
deskIds.add(d.getId());
}
}
Цикл перебирает список объектов «ProvidedService» и для каждого из них перебирает свойство списка объектов «Desk» и извлекает поле «Id» в список.
Я придумал следующий код, используя потоки:
List<Long> deskIds = new ArrayList<>();
service.getAllNodesDepthFirst().stream().forEach(srv -> {
deskIds.addAll(srv.getDesks().stream().map(Desk::getId).collect(Collectors.toList()));
});
Это правильный/оптимальный способ сделать это? Или есть способ сделать это без второго вложенного потока?