在java lambda中为每个对象嵌套

在java lambda中为每个对象嵌套,java,lambda,Java,Lambda,这是我的嵌套foreach代码 vehicleList.forEach(vehicle->{ vehicle.getRegionList().forEach(regionList->{ // Some DB functions here and passing below details to every iteration // vehicle.getVehicleId();

这是我的嵌套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中实现我的概念

您可以使用
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();
  })
vehicleList.stream()
.flatMap(v->v.getRegionList()
.stream()
.map(r->newAbstractMap.SimpleImmutableEntry(v,r)))
.forEach(e->{
车辆钥匙=e.获取钥匙();
Region=e.getValue();
})
理想的管道结构在很大程度上取决于您试图实现的目标:因为您提到您正在执行数据库操作,所以由于选中的异常,流可能不是最佳选择


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

您可以使用
flatMap
获得区域列表的平面图,但这样会丢失车辆信息,因为这是一个嵌套的数据结构,所以自然要进行两次迭代。你为什么想一次完成它?它很有效。。但使用stream-want为每个循环嵌套允许您更好地处理异常。在这种情况下最好使用for-loop.IMHO任何不是oneliner的lambda都是不好的。谢谢你的建议。我将使用for循环,而不是使用Lambada。