Incrémenté du troisième argument de la méthode iterate de la classe Stream ajoutée depuis Java9

Aperçu

Cet article résume le comportement lors de l'incrémentation avec le troisième argument de la méthode iterate de la classe Stream ajoutée à partir de Java 9.

1. À propos de la méthode iterate qui a trois arguments d'entrée de la classe Stream

Je vois souvent le code suivant comme un moyen d'utiliser la méthode iterate, qui a trois arguments d'entrée pour la classe Stream.

Stream.Exemple de code pour savoir comment utiliser iterate


//Code qui génère une valeur numérique de 0 à 9
Stream.iterate(0, i -> i < 10, i -> i + 1).forEach(System.out::println);

Résultat d'exécution


0
1
2
3
4
5
6
7
8
9

Les arguments de la méthode iterate sont les suivants. ** Premier argument **: valeur initiale ** Second argument **: une classe qui renvoie une condition pour renvoyer le prochain élément Stream (décrit dans une expression lambda dans l'exemple de code) ** Troisième argument **: Classe qui renvoie l'élément du prochain Stream (décrit dans l'expression lambda dans l'exemple de code) La réécrire dans l'instruction for conventionnelle est la suivante.

Code qui réécrit l'exemple de code dans l'instruction for conventionnelle


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

Lorsque j'en ai entendu parler pour la première fois, j'ai été impressionné par le fait que l'API Stream puisse être utilisée pour des choses semblables à des phrases.

La documentation de l'API Java est liée ci-dessous. [Spécifications Stream.iterate de la documentation de l'API Java](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. Incrémenter avec le troisième argument

Je m'interrogeais sur le fait que le troisième argument est souvent expliqué par i-> i + 1 sans utiliser d'incrément, j'ai donc écrit ce qui suit.

Code qui réécrit le troisième argument de l'exemple de code?


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

Ensuite, le résultat de l'exécution est le suivant.

Résultat d'exécution


0
0
0
0
0
0
0
0
~~~~~~~~~~~~~~~~~~~~~~
Ci-dessous, 0 est affiché à l'infini, il est donc omis.
~~~~~~~~~~~~~~~~~~~~~~

Le résultat sera affiché avec i = 0 et une boucle infinie se produira. Étant donné que la méthode apply de la classe UnaryOperator spécifiée dans le troisième argument de Stream.class (décrite dans l'expression lambda dans l'exemple de code) est utilisée, elle est renvoyée avant l'incrémentation de la valeur dans le troisième argument. Si vous voulez vraiment l'incrémenter, vous devez le réécrire du suffixe au préfixe comme indiqué ci-dessous.

Code qui réécrit le troisième argument de l'exemple de code


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

en conclusion

Puisqu'il existe une telle fonctionnalité sur l'incrément, elle peut être écrite en i-> i + 1 lors de son introduction. Lorsque vous écrivez personnellement, il semble utiliser l'incrément. En premier lieu, je n'utilise Java qu'après 9 pour moi-même ...

Recommended Posts

Incrémenté du troisième argument de la méthode iterate de la classe Stream ajoutée depuis Java9
Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java
[Java] Syntaxe orientée objet - Méthode / argument de classe
[Java débutant] Conversion d'une chaîne de caractères en valeur numérique - Quelle est la méthode parseInt de la classe Integer? ~
Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java [décoction n ° 2]
Exprimons le résultat de l'analyse du code d'octet Java dans un diagramme de classes
[Servlet Java] La route de Senri est aussi la troisième étape de la première étape
À partir de Java9, les constructeurs de classe correspondant aux types primitifs sont marqués comme obsolètes.
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
[Java] Obtenez la date avec la classe LocalDateTime
Partie de la classe appelée à partir de la classe testée dans le mémo de méthode JMockit Mock
[Java] Calculer le jour à partir de la date (ne pas utiliser la classe Calendar)
[Android] Appeler la méthode d'argument par défaut de Kotlin depuis Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'ordre des modificateurs de méthode Java est fixe
[Java] Réglez l'heure depuis le navigateur avec jsoup
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Calculer le score de similarité des chaînes de caractères avec JAVA
Nom de la méthode de la méthode de fabrique statique apprise à partir de Java 8
Première touche de la classe Files (ou Java 8)
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Java Méthode à usage général qui récupère uniquement les différences entre les propriétés des objets de la même classe
[Java] Trier ArrayList avec des éléments de votre propre classe
CI l'architecture des applications Java / Kotlin avec ArchUnit
Comment écrire Scala du point de vue de Java
Utiliser des expressions Java lambda en dehors de l'API Stream
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
Langage Java du point de vue de Kotlin et C #
Surveillez l'état interne des programmes Java avec Kubernetes
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
Java: utilisez Stream pour trier le contenu d'une collection
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
Remplacez seulement une partie de l'hôte URL par java
[Java] Le rapport de couverture n'a pas pu être créé en combinant la méthode par défaut de l'interface Cobertura +
Programmation Java (méthode de classe)
Comment obtenir le nom d'une classe / méthode exécutée en Java
Seul le flux de niveau supérieur peut être parallélisé avec Java Stream.
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
[Java] Simplifiez la mise en œuvre de la gestion de l'historique des données avec Reladomo
Java: dont le problème est plus rapide, en flux ou en boucle
Récapitulatif des valeurs renvoyées par la méthode des caractéristiques Spliterator #java
Assurez-vous de comparer le résultat Java compareTo avec 0
[Java] Supprimer le nombre spécifié de caractères à la fin de StringBuilder
Générer un flux à partir d'un tableau de types primitifs en Java
[Java] Précautions lors de la création d'un processus qui appelle une méthode de classe abstraite utilisant DI à partir d'une classe enfant