簡體   English   中英

3 個嵌套的 for-each 循環作為 Java Stream(或更好的並行流)

[英]3 nested for-each loops as Java Stream (or better parallel stream)

在我目前正在進行的項目中,我們有三個嵌套 for 循環的結構:

List<OutputDataType> resultList = new ArrayList<>();

for (OrgStructureEntity product : products) {

       for (String region : regions) {

                for (SalesType salesType : SalesType.values()) {

                    resultList.addAll(new SalesRequest(getConnection(),
                            product.getProductMainGroup(), product.getSbu(), planYear, currentPeriod, region, salesType,
                            exchangeRates).calculateSalesKpis());
                }    
       }
}

product 和 region 都是 Sets。 resultList 是一個帶有“OutputDataType”對象的 ArrayList。 方法calculateSalesKpis() 還返回一個“OutputDataType”對象列表。 所有這些對象都應該添加到 resultList 中。 我想用並行流來做這一切以使其更快,但我沒有比這更進一步:

products.stream()
                .map(product -> regions.stream()
                        .map(region -> Arrays.stream(SalesType.values())
                                .map(salesType -> new SalesRequest(getConnection(),
                                        product.getProductMainGroup(), product.getSbu(), planYear, currentPeriod, region, salesType,
                                        exchangeRates).calculateSalesKpis())))
                .

我現在不知道如何將其全部放入結果列表以及如何正確關閉流。 我希望你可以幫助我 :)

為了避免在 Stream> 上工作,您需要在執行集合之前使用flatmap方法展平嵌套的Stream結構:

products.stream()
  .flatMap(product -> regions.stream()
    .flatMap(region -> Arrays.stream(SalesType.values())
     .flatMap(salesType -> new SalesRequest(getConnection(),
       product.getProductMainGroup(), product.getSbu(), planYear, currentPeriod, region, salesType, exchangeRates).calculateSalesKpis().stream())))
  .collect(Collectors.toList())

            .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM