在我目前正在进行的项目中,我们有三个嵌套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是一个带有&#34; OutputDataType&#34;的ArrayList;对象。 方法calculateSalesKpis()还返回&#34; OutputDataType&#34;的列表。对象。 应该将所有这些对象添加到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())))
.
我现在不知道如何将它全部放在结果列表中以及如何正确关闭流。 我希望你能帮助我:)。
答案 0 :(得分:5)
为了避免使用Stream&gt;,您需要在执行集合之前使用Stream
方法展平嵌套的flatmap
结构:
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())
.