0

Steam.spliterator で作成されたストリームを (2 回目) 繰り返すことができません。同じことに関するドキュメントが見つかりませんでした。

これが私がやっていることです:

Iterableas funciton引数を取得し、次のコードのようにストリームを介してこれを繰り返しています:

StreamSupport.stream(values.spliterator(), false)

その後、私はそれをもう一度やっていますが、2番目のものはまったく反復しません。私はそれをデバッグするのに多くの時間を費やし、最終的に最初に iterable をリストに変換しました。

どなたか理由をご存知ですか?

編集:明確でない場合は申し訳ありませんが、

ストリームを複数回使用していませんでした。同じ Iterable を使用して上記の方法でストリームを生成していました。

Iterable は、MapReduce ジョブの reduce から来るものです。

ありがとう、ハリンドラ

4

2 に答える 2

0

AStreamはワンショット オブジェクトです。複数回ではなく、一度だけ消費できます。コンテンツを複数回使用したい場合は、ストリームをリストや配列、またはストリームでないものに変換してから、やりたい2つのことのために2つの新しいストリームを作成する必要があります。

クラスの JavaDocStreamからの引用:

ストリームの操作 (中間または端末ストリーム操作の呼び出し) は 1 回だけにしてください。これにより、たとえば、同じソースが 2 つ以上のパイプラインにフィードする「フォークされた」ストリーム、または同じストリームの複数のトラバーサルが除外されます。

于 2016-05-06T09:04:20.713 に答える