ホームページ > Java > &#&チュートリアル > Java 8 ストリームを効率的に繰り返してインデックスにアクセスするにはどうすればよいですか?

Java 8 ストリームを効率的に繰り返してインデックスにアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-27 12:10:10
オリジナル
925 人が閲覧しました

How Can I Efficiently Iterate Through a Java 8 Stream and Access Indices?

Java 8 でのインデックスを使用した効率的なストリーム反復

概要

Java 8 でストリームを反復しながらインデックスにアクセスするには、特に LINQ の対応物と比較すると、退屈なタスクです。この記事では、この機能を実現するための簡潔で効率的な方法について説明します。

中間ソリューション

1 つのアプローチは、インデックスのストリームと要素のストリームを結合することです。 zip方式。ただし、このメソッドは移動または削除されたため、このアプローチはアクセスしにくくなっています。

最もクリーンな方法: インデックスから

より合理化されたソリューションは、インデックスの流れ。これは、IntStream.range() を使用して実現でき、フィルタリングおよびマッピング操作の便利な開始点を提供します。

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
IntStream.range(0, names.length)
         .filter(i -> names[i].length() <= i)
         .mapToObj(i -> names[i])
         .collect(Collectors.toList());
ログイン後にコピー

可変インデックスの使用

別の代替方法は次のとおりです。 AtomicInteger のような可変オブジェクトを使用してアドホック カウンターを維持します。このアプローチは従来の for ループに似ています。

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
                          .filter(n -> n.length() <= index.incrementAndGet())
                          .collect(Collectors.toList());
ログイン後にコピー

並列ストリームに関する注意

この後者の方法を並列ストリームで使用すると、問題が発生する可能性があることに注意することが重要です。順番に処理されない場合があります。

以上がJava 8 ストリームを効率的に繰り返してインデックスにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート