Java 8 Flux peek de l'api
J'ai essayé l'extrait suivant de Java 8 code avec peek
.
List<String> list = Arrays.asList("Bender", "Fry", "Leela");
list.stream().peek(System.out::println);
Cependant rien n'est imprimé sur la console. Si je fais ça à la place:
list.stream().peek(System.out::println).forEach(System.out::println);
Je vois à l'issue de laquelle les sorties à la fois le coup d'oeil ainsi que foreach invocation.
Bender
Bender
Fry
Fry
Leela
Leela
Les deux foreach
et peek
prendre dans un (Consumer<? super T> action)
Alors, pourquoi est la sortie de différent?
Vous devez vous connecter pour publier un commentaire.
La Javadoc mentionne les suivantes:
peek
être un intermédiaire de l'opération ne fait rien. Sur l'application d'un terminal commeforeach
, les résultats ne sont imprimées comme vu.peek
est particulièrement utile lorsque vous déboguez certains d'exploitation du terminal et que vous souhaitez savoir ce que l'état précédent ressemblait avant l'exploitation du terminal est appliquée sur elle. Vous pouvez utiliserpeek
pour imprimer les éléments du flux dans ce cas.peek
renvoie immédiatement un nouveau flux, ce qui n'est pas rien non plus.La documentation pour
peek
ditPar conséquent, vous devez faire quelque chose avec le flux résultant pour
System.out.println
rien à faire.De docs sur Flux pour la méthode lire:
Flux en Java-8 sont paresseux, en outre, dire si il y a deux opérations enchaînées dans le flux, l'un après l'autre, puis la deuxième opération commence dès que la première se termine le traitement d'une unité de l'élément de données (étant donné qu'il existe un terminal de l'opération dans le cours d'eau).
C'est la raison pour laquelle vous pouvez voir se répéter le nom des chaînes de l'obtention de la sortie.