Maison >Java >javaDidacticiel >Comment puis-je parcourir efficacement un flux Java 8 et accéder aux index ?
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!