在java lambda中为每个嵌套

时间:2017-06-19 06:29:28

标签: java lambda

这是我的嵌套foreach代码,

vehicleList.forEach(vehicle->{
              vehicle.getRegionList().forEach(regionList->{

                  // Some DB functions here and passing below details to every iteration 
                  // vehicle.getVehicleId(); 
                  // regionList.getRegionId(); 
                  // regionList.getRegionType();                      

              });
        });

这里我使用了两个forEach循环。是否有可能在单个forEach中实现我的概念。

1 个答案:

答案 0 :(得分:1)

您可以在每个内容列表的流中使用flatMap,然后map

vehicleList.stream()
  .flatMap(v -> v.getRegionList()
       .stream()
       .map(r -> new AbstractMap.SimpleImmutableEntry<>(v, r)))
  .forEach(e -> {
    Vehicle key = e.getKey();
    Region region = e.getValue();
  })

理想的管道结构在很大程度上取决于您尝试实现的目标:由于您提到您正在进行数据库操作,因为检查异常,流可能不是最佳选择。

最后请注意,使用forEach通常应该是最后的选择,因为Consumer的使用意味着副作用,大多数用例可以重构为不使用forEach