用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

回到顶部