ホームページ  >  記事  >  Java  >  コレクションに変換せずに Java ストリームで同じデータを 2 回処理するにはどうすればよいですか?

コレクションに変換せずに Java ストリームで同じデータを 2 回処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-07 00:36:03850ブラウズ

How to Process the Same Data Twice in Java Streams without Converting to a Collection?

「ストリームはすでに操作されているか、閉じられています」エラーへの対処

ストリーム操作は反復可能ではないため、ストリームは使用できるのみです一度。ここで疑問が生じます: 再生成のコストをかけずに同じデータを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。