2017-06-19 26 views
0

這是我對嵌套的foreach代碼,嵌套每個Java中的λ

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實現我的概念。

+0

您可以使用'flatMap'獲取地區列表的平坦列表,但是您將丟失車輛信息 – ByeBye

+0

這是一個嵌套的數據結構,因此兩次迭代很自然。你爲什麼想要在一個? – Henry

+1

它的工作原理..但嵌套每個循環與流希望讓你更好地處理異常。在這種情況下更好地使用循環。 – iMBMT

回答

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