【发布时间】:2014-11-27 16:03:45
【问题描述】:
在学习 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()));
});
这是正确/最佳的方法吗?或者有没有办法在没有第二个嵌套流的情况下做到这一点?
【问题讨论】:
-
我觉得没问题。你的方法没有问题。
-
欲了解更多信息,请查看此链接:oracle.com/technetwork/articles/java/…
-
@Prakhar:是的,我的方法奏效了,但它有点幼稚,我认为应该有某种方法来简化它,就像 assylias 所展示的那样。
标签: java java-8 java-stream