Maison >Java >javaDidacticiel >Comment puis-je parcourir efficacement un flux Java 8 et accéder aux index ?

Comment puis-je parcourir efficacement un flux Java 8 et accéder aux index ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 12:10:10923parcourir

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

Itération de flux efficace avec des indices dans Java 8

Introduction

L'accès aux indices lors d'une itération sur des flux dans Java 8 peut être une tâche fastidieuse, surtout par rapport à son homologue LINQ. Cet article explore des moyens concis et efficaces pour atteindre cette fonctionnalité.

La solution intermédiaire

Une approche consiste à combiner un flux d'indices avec le flux d'éléments, en utilisant le méthode zip. Cependant, cette méthode a été soit déplacée, soit supprimée, ce qui rend cette approche moins accessible.

La méthode la plus propre : à partir des indices

Une solution plus simple consiste à commencer par un flux d’indices. Ceci peut être réalisé en utilisant IntStream.range() et fournit un point de départ pratique pour les opérations de filtrage et de mappage :

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());

Utilisation d'un index mutable

Une autre alternative est pour maintenir un compteur ad hoc en utilisant un objet mutable comme un AtomicInteger. Cette approche ressemble aux boucles for traditionnelles :

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());

Attention aux flux parallèles

Il est important de noter que l'utilisation de cette dernière méthode sur des flux parallèles peut introduire des problèmes, car des éléments ne peut pas être traité dans l'ordre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn