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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-05 14:18:02676ブラウズ

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

コピーせずに反復子をストリームに変換する

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

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

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

<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream<String> targetStream = StreamSupport.stream(
    Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
    false);</code>

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

<code class="java">Iterable<String> iterable = () -> sourceIterator;
Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);</code>

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

以上がデータをコピーせずにイテレータをストリームに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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