2016-11-16 4 views
3

私は現在、私たちはループのネストされた3のこの構造を持っている、働いている:のJavaストリーム(またはそれ以上の並列ストリーム)としてのために、各ループのネストされた3

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()は、 "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()))) 
       . 

私は今、結果リストにそれをすべて置く方法がわからないとどのようにストリームを正しく閉じます。 私は、あなたがコレクションを実行する前flatmap方法を使用して、ネストされたStream構造をフラット化する必要があります>あなたが私を助けることができます:)

+1

使用.collect(コレクター.toList())最後のドットがどこにあるのかを指定するには、 –

+0

の結果を集めてください。それは残念ながら動作しません... – Bofrostmann

答えて

5

ストリームでの作業を避けるために願っています:

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

      . 
+0

それは動作しません。私はそれがcalculateSalesKpis()が1つのOutputDataTypeオブジェクトを返すのではなく、OutputDatatypeオブジェクトのリストを返すためだと思います... – Bofrostmann

+0

collect(java.util.stream.Collector <?super java.util.List 、A、R>)を適用できません。 〜 (java.util.stream.Collector 、List >) – Bofrostmann

+1

@Bofrostmannさらに変更を加えましたが、コードの残りの部分はまったく推測していません。今すぐお試しください –

関連する問題