Maison >Java >javaDidacticiel >Comment itérer efficacement les flux Java 8 avec des indices ?
Itération de flux avec des indices dans Java 8
Dans Java 8, les flux fournissent un moyen puissant de traiter des collections d'éléments. Cependant, parcourir un flux tout en accédant aux index peut être difficile.
L'extrait de code fourni démontre une solution élaborée utilisant zip et SimpleEntry pour associer des index et des éléments de flux. Cependant, existe-t-il une approche plus concise ?
Heureusement, oui. Vous pouvez commencer avec un flux d'index et filtrer en fonction de l'index en le comparant à la longueur de l'élément correspondant. Voici un exemple :
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());
Approche alternative
Vous pouvez également gérer un compteur ad hoc en utilisant un objet mutable comme AtomicInteger. Cependant, cette méthode ne doit pas être utilisée sur des flux parallèles car elle peut conduire à des résultats incorrects en raison d'un traitement dans le désordre. Un exemple :
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!