Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse

Überblick

Dieser Artikel fasst das Verhalten beim Inkrementieren mit dem dritten Argument der iterierten Methode der aus Java 9 hinzugefügten Stream-Klasse zusammen.

1. Informationen zur iterierten Methode mit drei Eingabeargumenten der Stream-Klasse

Ich sehe den folgenden Code oft als eine Möglichkeit, die iterate-Methode zu verwenden, die drei Eingabeargumente für die Stream-Klasse enthält.

Stream.Beispielcode für die Verwendung von Iteration


//Code, der einen numerischen Wert von 0 bis 9 ausgibt
Stream.iterate(0, i -> i < 10, i -> i + 1).forEach(System.out::println);

Ausführungsergebnis


0
1
2
3
4
5
6
7
8
9

Die Argumente der iterierten Methode lauten wie folgt. ** Erstes Argument **: Anfangswert ** Zweites Argument **: Eine Klasse, die eine Bedingung für die Rückgabe des nächsten Stream-Elements zurückgibt (beschrieben in einem Lambda-Ausdruck im Beispielcode). ** Drittes Argument **: Klasse, die das Element des nächsten Streams zurückgibt (beschrieben im Lambda-Ausdruck im Beispielcode) Das Umschreiben in die herkömmliche for-Anweisung ist wie folgt.

Code, der den Beispielcode in die herkömmliche for-Anweisung umschreibt


for (int i = 0; i < 10; i++) {
     System.out.println(i);
}

Als ich zum ersten Mal davon erfuhr, war ich beeindruckt, dass die Stream-API für satzähnliche Dinge verwendet werden kann.

Die Java-API-Dokumentation ist unten verlinkt. [Stream.iterate-Spezifikationen aus der Java-API-Dokumentation](https://docs.oracle.com/javase/jp/9/docs/api/java/util/stream/Stream.html#iterate-T-java.util .function.Predicate-java.util.function.UnaryOperator-)

2. Inkrement mit drittem Argument

Ich habe mich über die Tatsache gewundert, dass das dritte Argument oft durch i-> i + 1 ohne Inkrement erklärt wird, also habe ich Folgendes geschrieben.

Code, der das dritte Argument des Beispielcodes neu schreibt?


Stream.iterate(0, i -> i < 10, i -> i++).forEach(System.out::println);

Dann ist das Ausführungsergebnis wie folgt.

Ausführungsergebnis


0
0
0
0
0
0
0
0
~~~~~~~~~~~~~~~~~~~~~~
Unten wird 0 endlos ausgegeben, daher wird es weggelassen.
~~~~~~~~~~~~~~~~~~~~~~

Das Ergebnis wird mit i = 0 ausgegeben und es tritt eine Endlosschleife auf. Da die Apply-Methode der UnaryOperator-Klasse verwendet wird, die im dritten Argument in Stream.class angegeben ist (beschrieben im Lambda-Ausdruck im Beispielcode), wird sie zurückgegeben, bevor der Wert im dritten Argument erhöht wird. Wenn Sie es wirklich erhöhen möchten, müssen Sie es wie folgt vom Suffix zum Präfix umschreiben.

Code, der das dritte Argument des Beispielcodes neu schreibt


Stream.iterate(0, i -> i < 10, i -> ++i).forEach(System.out::println);

abschließend

Da es eine solche Funktion zum Inkrementieren gibt, kann sie bei der Einführung in i-> i + 1 geschrieben werden. Wenn Sie persönlich schreiben, scheint es Inkrement zu verwenden. Erstens benutze ich Java erst nach 9 für mich ...

Recommended Posts

Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse
Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java
[Java] Objektorientierte Syntaxklassenmethode / Argument
[Java-Anfänger] Konvertierung von Zeichenfolge in numerischen Wert - Was ist die parseInt-Methode der Integer-Klasse? ~
Finden Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java [Abkochung Nr. 2]
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
[Java Servlet] Die Straße von Senri ist auch der dritte Schritt vom ersten Schritt
Ab Java9 werden Klassenkonstruktoren, die primitiven Typen entsprechen, als veraltet markiert.
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
Ein Teil der Klasse, der von der zu testenden Klasse im JMockit Mock-Methodenmemo aufgerufen wurde
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
[Android] Rufen Sie Kotlins Standardargumentmethode von Java aus auf
[Java] Behandlung von Java Beans in der Methodenkette
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Methodenname der statischen Factory-Methode, die aus Java 8 gelernt wurde
Erster Touch der Files-Klasse (oder Java 8)
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Java Allzweckmethode, die nur die Unterschiede zwischen den Eigenschaften von Objekten derselben Klasse abruft
[Java] Sortieren Sie ArrayList nach Elementen Ihrer eigenen Klasse
CI die Architektur von Java / Kotlin-Anwendungen mit ArchUnit
Wie schreibe ich Scala aus der Perspektive von Java
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
Java-Sprache aus der Sicht von Kotlin und C #
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
Überprüfen Sie das Verhalten von Java Intrinsic Locks mit bpftrace
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
Die Geschichte von dto, dao-like mit Java, SQLite
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
[Java] Der Abdeckungsbericht konnte nicht durch Kombinieren der Standardmethode der Cobertura + -Schnittstelle erstellt werden
Java-Programmierung (Klassenmethode)
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Nur der Stream der obersten Ebene kann mit Java Stream parallelisiert werden.
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
[Java] Vereinfachen Sie die Implementierung der Datenverlaufsverwaltung mit Reladomo
Java: Das Problem ist schneller, Stream oder Loop
Zusammenfassung der von der Spliterator-Merkmalsmethode #java zurückgegebenen Werte
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
[Java] Löschen Sie die angegebene Anzahl von Zeichen am Ende von StringBuilder
Generieren Sie Stream aus einem Array primitiver Typen in Java
[Java] Vorsichtsmaßnahmen beim Erstellen eines Prozesses, der eine Methode der Abstract-Klasse mit DI aus einer untergeordneten Klasse aufruft