Pie*_*nry 23 java java-8 java-stream
在学习Java 8流和lambas时,我尝试用流替换以下嵌套for循环:
List<Long> deskIds = new ArrayList<>();
for(ProvidedService memberService : service.getAllNodesDepthFirst()){
for(Desk d : memberService.getDesks()){
deskIds.add(d.getId());
}
}
Run Code Online (Sandbox Code Playgroud)
循环迭代一个'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()));
});
Run Code Online (Sandbox Code Playgroud)
这是正确/最佳的方式吗?或者有没有办法在没有第二个嵌套流的情况下执行此操作?
ass*_*ias 29
我可能会这样写:
List<Long> deskIds = service.getAllNodesDepthFirst().stream()
.flatMap(p -> p.getDesks().stream())
.map(Desk::getId)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12707 次 |
| 最近记录: |