Ich möchte Java8 für jeden mit Index verwenden

Wenn Sie die java8 forEach-Methode verwenden, möchten Sie möglicherweise einen Index (Seriennummer). Wenn Sie zu diesem Zeitpunkt versuchen, eine Zählervariable zu verwenden, können Sie sie im Lambda nicht aktualisieren, sodass Sie ein Array verwenden müssen.

Ich kann das nicht machen


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

Du kannst das


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

In beiden Fällen sind die Aussichten nicht gut, daher möchte ich, dass es so aussieht.

ich möchte das machen


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

Erstellen wir also eine Dienstprogrammmethode.

Klassenname und Methodenname sind angemessen


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]++);
  }
}

Der Anfangswert kann ebenfalls eingestellt werden.

erledigt


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

Ausführungsergebnis


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

[Achtung] Wenn Sie parallel im Stream ausführen, verwenden Sie bitte forEachOrdered.

das ist alles

Recommended Posts

Ich möchte Java8 für jeden mit Index verwenden
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich habe versucht, mit Java zu interagieren
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Ich möchte Java-Updates insgesamt stoppen
Ich möchte @Autowired in Servlet verwenden
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
R von Java ausführen Ich möchte rJava ausführen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich möchte eine E-Mail in Java senden.
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
rsync4j - Ich möchte rsync in Java berühren.
Verwendung der Java-API mit Lambda-Ausdrücken
Ich möchte mit Firestore von Rails spielen
Ich möchte schnell von Java nach SQLite schreiben
[Java Spring MVC] Ich möchte DI in meiner eigenen Klasse verwenden
Ich habe versucht, den Block mit Java zu brechen (1)
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
[Rails] Ich möchte CSS mit Webpacker laden
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
[Eclipse] Ich möchte die Abschlussfunktion verwenden, aber ich möchte es schaffen, den Abschluss mit einem Leerzeichen zu bestätigen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich möchte Combine auch in UIKit verwenden.
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Ich möchte so etwas wie "cls" in Java machen
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte NetBeans auf einem Mac verwenden → Ich kann es verwenden!
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich möchte auch in Laradock Fischschalen verwenden! !!
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren
Wenn Sie Mockito mit Kotlin verwenden möchten, verwenden Sie Mockito-Kotlin
[Android Studio] Ich möchte eine Maven-Bibliothek unter Android verwenden
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe nc (netcat) normalerweise mit JAVA gemacht
Verwenden Sie Lambda-Ebenen mit Java
Verwendung von Java Optional
Verwendung der Java-Klasse