Java permet de construire un flux de traitement (ou un pipeline) qui contient un ensemble d'étapes (ou opérations) qui s’appliquent en série sur les éléments d’une source de données.
Les opérations qui peuvent être appliquées sur un flux sont de deux types :
des
opérations intermédiaires
(
intermediate operations)
ou des
opérations terminales
(
terminal operation).
-
Le flux de traitement commence par créer une instance de l’interface
java.util.stream.Stream
à partir d’une source de données (collection, tableau, ensemble d’éléments).
Exemples :
-
Les opérations intermédiaires du pipeline produisent une nouvelle instance de l’interface
Stream
.
Exemples :
-
L’opération terminale du pipeline produit un résultat ou un effet de bord.
Cette opération ferme le flux.
Exemples :
-
Les opérations intermédiaires sont exécutées uniquement si l'opération terminale est initiée.
Autrement dit, les opérations intermédiaires d’un pipeline ne seront jamais exécutées si le pipeline ne declare pas une operation terminale.
Aussi les éléments de la source de données sont consommés uniquement au besoin.
Exemples :
-
Une seule opération terminale peut s'appliquer sur une instance
Stream
.
Si une deuxième opération (intermédiaire ou terminale) est appliquée sur une instance Stream
après l'exécution de l'opération terminale, une exception va être déclenchée :
"java.lang.IllegalStateException: stream has already been operated upon or closed"
.
Exemples :
-
La chaine des operations qui peuvent être appliquées sur une séquence des éléments peuvent être exécutées en série (par défaut) ou en parallèle.
Exemples :