7

意図したとおりに機能しない次のコードがあります (最初の行ではなく、ランダムな行がスキップされます)。

Files.lines(path)
     .skip(1)
     .parallel()
     .forEach( System.out::println )

Streams の動作を誤解しているような気がします。問題は、最初にストリームをシーケンシャルとして処理し (そして「ステートフルな中間操作」を使用して)、それを並列にフィードできるforEachかどうかです。

4

4 に答える 4

2

パイプライン全体は、並列または順次のいずれかです。

forEachOrderedの代わりに使ってみてくださいforEach。私のテストでは、forEachOrdered使用されている場合は最初の行をforEachスキップします(最後の行をスキップします)。

forEach遭遇順序を無視し、それを無視する他の操作を行うこともできるようです。

于 2013-12-19T10:21:29.367 に答える
1

これはバグではなく、機能です。呼び出しparallel()により、ストリーム全体が並列になります。後続の呼び出しsequential()が行われない限り、ストリーム全体がシーケンシャル モードに戻ります。

Javadocは次のように述べています。

同等の並列ストリームを返します。

于 2013-12-17T17:06:23.433 に答える