Maison > Java > javaDidacticiel > Comment puis-je parcourir efficacement un flux Java 8 avec accès aux index ?

Comment puis-je parcourir efficacement un flux Java 8 avec accès aux index ?

DDD
Libérer: 2024-12-28 19:27:14
original
833 Les gens l'ont consulté

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

Itération de flux concise avec des indices en Java 8

Itérer sur un flux en Java 8 tout en ayant également accès à ses indices peut être réalisé en utilisant une variété de méthodes, la plus simple étant de partir d'un flux d'index.

Par exemple, le code ci-dessous génère un flux de entiers de 0 à la longueur du tableau "names", filtre les indices où la longueur de la chaîne correspondante est supérieure à l'index et collecte les chaînes résultantes dans une liste :

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList = IntStream.range(0, names.length)
         .filter(i -> names[i].length() <= i)
         .mapToObj(i -> names[i])
         .collect(Collectors.toList());
Copier après la connexion

Cela donne une liste contenant uniquement "Erik", puisque sa longueur (4) est inférieure ou égale à son indice (4).

Une approche alternative, bien que moins concise, consiste à maintenir un compteur ad hoc au sein la méthode du filtre. Cependant, il est crucial de noter que l'utilisation de cette méthode sur un flux parallèle peut entraîner un traitement des éléments dans le désordre.

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());
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal