ストリームを効率的にコピーして「ストリームが閉じられた」エラーを防ぐ
Java 8 ストリームはデータ処理のための強力なメカニズムを提供しますが、それらは使い捨てです。同じデータに対して複数の操作が必要な場合、自然が問題を引き起こすことがあります。この問題は、「ストリームはすでに操作されているか、閉じられています」エラーとして現れます。
問題ステートメント:
上記のエラーを回避するために、一部の開発者はストリームの変換に頼っています。処理前にリストに追加します。このアプローチは機能しますが、効率が損なわれ、追加の手順が必要になる可能性があります。より洗練された効率的なソリューションを見つけることはできますか?
答え:
ストリームを保存するよりもコピーする方が効率的であるという仮定は、完全に正確ではありません。データを複数回再利用する必要がある場合は、ストレージまたはストリームの分割が必要です。
ストリームは、ループ融合などの単一使用シナリオに対して大幅な最適化を提供し、データ パイプライン全体の効率的な処理を可能にします。ただし、同じデータを再利用するには、データを 2 回生成するか、保存する必要があります。
Java ストリームで「フォークされたストリーム」を実装しようとすると、コストがかかることが判明し、まれな再利用の一般的な 1 回使用に負担がかかりました。課題は、2 つのパイプラインが異なるレートでデータを消費し、バッファリングが必要になる場合に発生します。
推奨されるアプローチ:
<code class="java">stream()...stuff....forEach(e -> { consumerA(e); consumerB(e); });</code>
代替オプション:
以上が「ストリームが閉じられました」エラーを回避するために Java でストリームを効率的にコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。