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

インデックスを使用して Java 8 ストリームを効率的に反復するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 07:26:24402ブラウズ

How to Efficiently Iterate Java 8 Streams with Indices?

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

Java 8 では、ストリームは要素のコレクションを処理する強力な方法を提供します。ただし、インデックスにアクセスしながらストリームを反復処理するのは困難な場合があります。

提供されたコード スニペットは、zip と SimpleEntry を使用してインデックスとストリーム要素をペアにする複雑なソリューションを示しています。しかし、もっと簡潔なアプローチはありますか?

幸いなことに、そのとおりです。インデックスのストリームから開始し、対応する要素の長さと比較することで、インデックスに基づいてフィルタリングできます。以下に例を示します。

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 のような可変オブジェクトを使用してアドホック カウンターを維持できます。ただし、この方法は、順序どおりに処理されずに不正確な結果が生じる可能性があるため、並列ストリームでは使用しないでください。例:

AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
                          .filter(n -> n.length() <= index.incrementAndGet())
                          .collect(Collectors.toList());

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

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