もっと Lambda その18

Java

昨日のエントリーの解答を載せておきます。

10
8
0
4
2
6

上記のように 0 から 10 までの偶数が表示されます。

出力される順番はプログラムが実行される環境により変わります。

これは parallel() メソッドにより平行ストリームとして処理されるからです。

JavaDOC では下記のようになってます。

java.​util.​stream.​IntStream

public IntStream parallel()

Returns an equivalent stream that is parallel. May return itself, either because the stream was already parallel, or because the underlying stream state was modified to be parallel.

This is an intermediate operation.

戻り値:

a parallel stream

それでは順序よく 0 から 10 までの偶数を表示させるにはどうすればいいでしょうか?

そんな我が儘なあなたに使って欲しいメソッドが用意されてます。

java.​util.​stream.​IntStream

public void forEachOrdered(IntConsumer action)

Performs an action for each element of this stream, guaranteeing that each element is processed in encounter order for streams that have a defined encounter order.

This is a terminal operation.

パラメータ:

action – a non-interfering action to perform on the elements

参照:

IntStream.forEach(IntConsumer)

 

これを使って昨日のプログラムを変更してみます。

ついでにメソッドリファレンスを使うように変更しました。

実行結果は期待通りに順序よく出力されます。

0
2
4
6
8
10

検証はしてないのですがコストが高くなるようなので使いどころを誤らないようにしなければいけないようです。

簡単なパズルでしたけどなんでもいいから平行ストリーム使っちゃえ!ってやってたらはまる可能性がありますね。(私のような単純で純粋なひとはw)

Hatena タグ: