2015-10-16 6 views
9
mylist.stream() 
     .filter(m -> m.isokay() != null) 
     .forEach(m -> m.dosomething())); 

このコードでは、複数のスレッドで実行されていますか? どうすればいいですか?この作業を高速化するために、それぞれm.dosomething()を別々のスレッドで実行したいと思います。Java 8ストリームマルチスレッド

+5

。 – Tunaki

+3

Fyi、 '.parallelStream()'は 'ForkJoinPool.commonPool()'を利用します。 –

+4

マルチスレッドでは、多くの場合、コードが遅くなることに注意してください。例えば、 [このページ](http://gee.cs.oswego.edu/dl/html/StreamParallelGuidance.html)は、ストリームの作者の一人が書いたものです。 –

答えて

11

parallelStream()を使用してください。ドキュメントには「おそらく平行」と書かれているので、非平行ストリームを返す可能性があります。私はこれらのケースがまれであると考えていますが、それは実際には限界であることに注意してください。私はあなたが[ `parallelStream()`](https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#parallelStream--)を探していると思う

mylist.parallelStream() 
     .filter(m -> m.isokay() != null) 
     .forEach(m -> m.dosomething()));