3 个嵌套的 for-each 循环作为 Java 流(或更好的并行流)

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());
                }    
       }
}

产品和地区都是集合。 resultList 是一个包含 "OutputDataType" 个对象的 ArrayList。 calculateSalesKpis() 方法也是 returns "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())

            .