用Java 8中的流替换嵌套的for循环的正确方法是什么?
在学习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”字段提取到列表中。
我想出了以下使用stream的代码:
List<Long> deskIds = new ArrayList<>();service.getAllNodesDepthFirst().stream().forEach(srv -> {
deskIds.addAll(srv.getDesks().stream().map(Desk::getId).collect(Collectors.toList()));
});
这是正确/最佳的方式吗?还是有没有第二个嵌套流的方法来执行此操作?
回答:
我可能会这样写:
List<Long> deskIds = service.getAllNodesDepthFirst().stream() .flatMap(p -> p.getDesks().stream())
.map(Desk::getId)
.collect(toList());
以上是 用Java 8中的流替换嵌套的for循环的正确方法是什么? 的全部内容, 来源链接: utcz.com/qa/404678.html