Je veux utiliser java8 forEach avec index

Lorsque vous utilisez la méthode java8 forEach, vous pouvez avoir besoin d'un index (numéro de série). À ce moment-là, si vous essayez d'utiliser une variable de compteur, vous ne pouvez pas la mettre à jour dans le lambda, vous devez donc utiliser un tableau.

Je ne peux pas faire ça


int i = 1;
java.util.stream.Stream.of("a", "b", "c", "d").forEach(s -> {
  System.out.println(i + ": " + s);
  i++;
});

Tu peux le faire


int i[] = { 1 };
java.util.stream.Stream.of("a", "b", "c", "d").forEach(s -> {
  System.out.println(i[0] + ": " + s);
  i[0]++;
});

Quoi qu'il en soit, les perspectives ne sont pas bonnes, alors je veux que cela ressemble à ceci.

Je veux faire ça


java.util.stream.Stream.of("a", "b", "c", "d").forEach(withIndex((s, i) -> System.out.println(i + ": " + s)));

Alors, créons une méthode utilitaire.

Le nom de la classe et le nom de la méthode sont appropriés


import java.util.function.Consumer;
import java.util.function.ObjIntConsumer;

public class With {
  public static <T> Consumer<T> B(int start, ObjIntConsumer<T> consumer) {
    int counter[] = { start };
    return obj -> consumer.accept(obj, counter[0]++);
  }
}

La valeur initiale peut également être définie.

l'a fait


java.util.stream.Stream.of("a", "b", "c", "d").forEach(With.B(1, (s, i) -> System.out.println(i + ": " + s)));

Résultat d'exécution


1: a
2: b
3: c
4: d

[Attention] Lorsque vous exécutez en parallèle dans un flux, veuillez concevoir comme utiliser forEachOrdered.

c'est tout

Recommended Posts

Je veux utiliser java8 forEach avec index
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux ForEach un tableau avec une expression Lambda en Java
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
Je veux faire des transitions d'écran avec kotlin et java!
J'ai essayé d'interagir avec Java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux implémenter diverses fonctions avec kotlin et java!
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je veux revenir à l'écran précédent avec kotlin et java!
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
Exécuter R à partir de Java Je veux exécuter rJava
J'ai essayé de faire une authentification de base avec Java
Je souhaite envoyer un e-mail en Java.
Je veux afficher des images avec REST Controller de Java et Spring!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Comment utiliser le framework Java avec AWS Lambda! ??
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
rsync4j --Je veux toucher rsync en Java.
Comment utiliser l'API Java avec des expressions lambda
Je veux jouer avec Firestore de Rails
Je veux écrire rapidement de java vers sqlite
[Java Spring MVC] Je souhaite utiliser DI dans ma propre classe
J'ai essayé de casser le bloc avec java (1)
Je souhaite effectuer un traitement d'agrégation avec spring-batch
[Rails] Je veux charger du CSS avec webpacker
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Je veux que vous utilisiez Scala comme meilleur Java pour le moment
[Eclipse] Je veux utiliser la fonction de complétion, mais je veux réussir à confirmer la complétion avec un espace
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
Je souhaite également utiliser Combine dans UIKit.
Je souhaite utiliser les fonctions pratiques de Clojure dans Kotlin
Je veux faire quelque chose comme "cls" en Java
[Java] Je souhaite calculer la différence par rapport à la date
Je veux utiliser NetBeans sur Mac → Je peux l'utiliser!
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
Je veux aussi utiliser des coquillages à Laradock! !!
Je veux utiliser une petite icône dans Rails
Je souhaite utiliser le mode sombre avec l'application SWT
Je souhaite surveiller un fichier spécifique avec WatchService
Je souhaite authentifier les utilisateurs auprès de Rails avec Devise + OmniAuth
Si vous souhaitez utiliser Mockito avec Kotlin, utilisez mockito-kotlin
[Android Studio] Je souhaite utiliser une bibliothèque Maven sur Android
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
Utiliser des couches Lambda avec Java
Comment utiliser java Facultatif
Comment utiliser la classe Java