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
DDDoriginal
2024-12-28 19:27:14760parcourir

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

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

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