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 サイトの他の関連記事を参照してください。