Докато изучавах Java 8 потоци и lambas, се опитах да заменя следните вложени 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()));
});
Това ли е правилният/оптималният начин да го направите? Или има начин да направите това без втория вложен поток?