問題タブ [spliterator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1447 参照

java - stream.spliterator() はストリームを閉じますか?

stream.spliterator()は暗黙的に を閉じますかstream、それとも後で明示的に閉じる必要がありますか?

一見すると、この.spliterator()メソッドは を閉じているように見えますが、streamは呼び出されていませんstream.close()。少なくとも、メソッドが呼び出された後にすぐに閉じると.spliterator()、スプリッテレータ操作には影響がないようです。

この質問はstream、たとえば.findAny().

その質問の理由は、stream明示的に閉じる必要がある場合と、明示的に閉じる必要がない場合に、onClose()定義されたアクションがいつ実行されるかを明確にするためです。

0 投票する
1 に答える
3300 参照

java - Java 8 および Java 9 の順次ストリーム スプリッテレータと並列ストリーム スプリッテレータを理解する

一見簡単ではないスプリッテレータに関する質問です。

ストリームで.parallel()は、ストリームが処理される動作を変更します。ただし、順次ストリームと並列ストリームから作成されたスプリッテレータは同じであると予想していました。たとえば、通常、順次ストリームで.trySplit()は が呼び出されることはありませんが、並列ストリームではスプリット スプリッテレータを別のスレッドに渡すために呼び出されます。

stream.spliterator()vsの違いstream.parallel().spliterator():

  1. それらには異なる特性がある場合があります。

    /li>

ここで説明されている別のナンセンスなストリームスプリッター特性ポリシー(並行して計算された方が良いようです)のようです:Java 8およびJava 9でのスプリッテレーター特性の理解

  1. を使用した分割に関して、それらは異なる動作をする場合があります.trySplit()

    /li>

最後の 2 つの動作が異なるのはなぜですか? シーケンシャル ストリームを分割したいのに分割できないのはなぜですか? (たとえば、高速処理のために分割の 1 つを破棄すると便利な場合があります)。

  1. スプリッテレータをストリームに変換するときの大きな影響:

    /li>

この場合、スプリッテレータは分割機能を無効にするシーケンシャル ストリームから作成されました ( .trySplit()null を返します)。後でストリームに戻す必要がある場合、そのストリームは並列処理の恩恵を受けません。残念なこと。

大きな問題:回避策として、呼び出す前に常にストリームを並列に変換することの主な影響は何ですか?.spliterator()

0 投票する
1 に答える
153 参照

java - Consumer 関数によって例外がスローされた後、Spliterator を再利用可能にする必要がありますか?

Spliteratorandメソッドで任意のConsumer関数を取ります。tryAdvanceforEachRemaining

コンシューマが例外をスローした場合、スプリッテレータの状態はどうあるべきですか? に渡されたコンシューマーがforEachRemaining10 個のアイテムの後に例外をスローした場合 (その後、伝播されてキャッチされます)、tryAdvanceスプリッテレーターでの次の呼び出しは 11 番目のアイテムを返す必要がありますか、それともスプリッテレーターはその時点で無効で無効であると見なされますか?

この点に関して、javadoc はあいまいです。彼らは、その時点を過ぎたスプリッテレータの状態を参照せずに、例外が伝播されると言っているだけです

0 投票する
2 に答える
522 参照

java - イテレータから作成された CompletableFuture ストリームが遅延評価されない

私は、完了可能な先物がいつどのように完成するかについて少し苦労しています。このテスト ケースを作成しました。

出力は次のとおりです。

testListメソッドは期待どおりに機能します。はCompletableFuture最後にのみ評価されるため、 limit メソッドの後は最初の 2 つの項目のみが保持されます。

しかし、そのtestIterator方法は予想外です。すべてCompletableFutureの 's が完了し、制限が行われるのは後でのみです。

parallel()ストリームからメソッドを削除すると、期待どおりに機能します。ただし、forEach()私の完全なプログラムでは長時間実行されるメソッドであるため、処理 ( ) は並行して実行する必要があります。

なぜこれが起こっているのか説明できる人はいますか?

これは Java のバージョンに依存しているように見えるので、私は 1.8 を使用しています。