「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > データをコピーせずにイテレータをストリームに変換するにはどうすればよいですか?

データをコピーせずにイテレータをストリームに変換するにはどうすればよいですか?

2024 年 11 月 15 日に公開
ブラウズ:905

How to Convert an Iterator to a Stream Without Copying Data?

コピーせずにイテレータをストリームに変換する

データ構造を扱うとき、さまざまな方法でデータを操作および処理する必要が生じることがよくあります。一般的なシナリオの 1 つは、要素の順次コレクションであるイテレーターを、より多用途で強力なデータ処理パイプラインであるストリームに変換することです。

この変換を効果的に達成するには、データのコピーの作成を避けることが不可欠です。 。これは、特に大規模なデータセットを扱う場合、非効率的かつ不必要です。

1 つのアプローチは、StreamSupport クラスを利用することです。 Iterable または Spliterator からストリームを作成するメソッドを提供します。この場合、Spliterators.spliteratorUnknownSize() を使用して Iterator から Spliterator を作成できます。次に例を示します。

Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream targetStream = StreamSupport.stream(
    Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
    false);

もう 1 つのオプションには、Iterator から Iterable を作成することが含まれます。 Iterable は関数型インターフェイスであり、ラムダを使用すると、Iterator から簡単に Iterable を作成できます。

Iterable iterable = () -> sourceIterator;
Stream targetStream = StreamSupport.stream(iterable.spliterator(), false);

このアプローチは、関数型インターフェイス設計を利用しているため、おそらくより読みやすくなっています。不必要なコピーを避けることで、パフォーマンスとコードの明瞭さを維持しながらデータを効率的に処理できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3