「ストリームはすでに操作されているか、閉じられています」エラーへの対処
ストリーム操作は反復可能ではないため、ストリームは使用できるのみです一度。ここで疑問が生じます: 再生成のコストをかけずに同じデータを 2 回処理するにはどうすればよいですか?
ストリームをコレクションに変換せずに解決策はありますか?
ストリームをコレクションに収集すると複数回の反復が可能になりますが、オーバーヘッドが追加されます。より良いアプローチは、コンシューマー関数を引数として受け取る forEach メソッドを利用することです。コンシューマ内では、各要素に対して複数の操作を実行できます。
<code class="java">stream().forEach(e -> { consumerA(e); consumerB(e); // ... });</code>
設計上の考慮事項と制限事項
Java Streams API は、次の理由によりストリーム フォークをサポートしていません。効率への影響。最も効率的な使用例は、データが 1 回だけ処理され、バッファリングやコピーの必要がない場合です。複数の反復が必要な場合は、データをコレクションに保存するか、RxJava などの代替ライブラリを使用することをお勧めします。
代替ライブラリ オプション: RxJava
RxJava はより柔軟です。ストリーム処理用のモデル。ストリームに似た、オブザーバブルへの複数のサブスクリプションをサポートします。これにより、同じデータを異なるコンシューマーによって並列または順次に処理できるようになります。これは、Java Streams では利用できない機能です。
以上がコレクションに変換せずに Java ストリームで同じデータを 2 回処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。