在学习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'对象的list属性,并将'Id'字段提取到列表中。
我使用流来提出以下代码:
List<Long> deskIds = new ArrayList<>();
service.getAllNodesDepthFirst().stream().forEach(srv -> {
deskIds.addAll(srv.getDesks().stream().map(Desk::getId).collect(Collectors.toList()));
});
这是正确/最佳的方式吗?或者有没有办法在没有第二个嵌套流的情况下执行此操作?
答案 0 :(得分:29)
我可能会这样写:
List<Long> deskIds = service.getAllNodesDepthFirst().stream()
.flatMap(p -> p.getDesks().stream())
.map(Desk::getId)
.collect(toList());