2016-04-01 19 views
3

かなり複雑なプロセスがあり、いくつかのレベルのネストされたforループが必要です。Java 8ストリームのストリーム並列処理

アクションは、特定の一連の条件に対してのみ実行されます。言い換えれば、

for(){ 
    if(){ 
     for(){ 
      if(){ 
       //Something happens RIGHT HERE 
      } 
      //And maybe here 
     } 
    } 
} 

他のステートメントはありません。異なるタイプのオブジェクトの束を反復する単なるコードパスです。

このロジックをストリームに置き換えると(このサイクルを完了するためにCPUが実行する操作の数を考慮すると、プロセスを並列化する方法があります)、ストリーム内にストリームがありますストリーム内のストリーム(BWOOOMMMPPPPPPP INCEPTION NOISE)と最上階層のparallelstream()は、最上位レベルの下のストリームは順番に実行されますが、それぞれのスレッド内で実行されますか?

toplevelItems.parallelstream().forEachOrdered{ 
     //Does this stuff run in series within as many threads as there are toplevelItems 
     otherObjects.stream().forEach{ 
      //or Naw? 
      stillOtherObjects.stream().forEach{ 

答えて

1

parallelStream()は、シリアル形式で行われます。私はあなたがList<List<>>のようなもので作業していると仮定します。トップレベルの下に新しいストリームを作成します。トップストリームには接続しません。

+0

修正。このメソッドは引数として渡された複数のリストを使用して、私が使っていたforループで繰り返し処理します。繰り返しの潜在的な回数を考えれば、並列処理は基本的に反復を半減させることができます(2〜4コアを使用)。私はもちろん測定しますが、私は平行してここに行く方法だと確信しています。 – TheFunk

関連する問題