Maison > Java > javaDidacticiel > Comment puis-je parcourir efficacement un flux Java 8 avec Index Access ?

Comment puis-je parcourir efficacement un flux Java 8 avec Index Access ?

Susan Sarandon
Libérer: 2024-12-18 14:32:17
original
536 Les gens l'ont consulté

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

Itération concise de flux basée sur un index en Java 8

De nombreuses tâches de programmation impliquent une itération sur une structure de données tout en accédant à l'index correspondant. Les flux Java 8 fournissent un large éventail d'opérations pour le traitement des flux, mais il n'existe aucun moyen explicite d'obtenir l'index pendant l'itération.

Le code Java fourni démontre une approche plutôt verbeuse utilisant IntStream, boxed(), zip( ), filter(), map() et collect(). Bien qu'il obtienne le résultat souhaité, sa longueur et sa complexité gâchent son élégance.

Méthode la plus propre :

L'approche la plus concise consiste à partir d'un flux d'indices :

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

Cette méthode construit un flux d'indices de 0 à la longueur du tableau, filtre les indices en fonction de la longueur de la chaîne correspondante, mappe les indices à les chaînes correspondantes et collecte les résultats dans une liste.

Méthode alternative :

Une autre option consiste à maintenir un compteur d'index ad hoc en utilisant un objet mutable comme un AtomicInteger :

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

Cette méthode préserve la familiarité de l'incrémentation d'index basée sur une boucle for. Cependant, il convient de noter que l'utilisation de cette méthode sur un flux parallèle peut potentiellement entraîner un comportement incorrect en raison de l'ordre non déterministe du traitement parallèle.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal