Si ce flux doit être filtré, pour avoir le résultat de seuls mots dont la longueur est supérieure à cinq caractères, le résultat serait:
crayon, coutumier, personnes, foresterieUn autre exemple de flux est:
chien, chauve-souris, nul, champ, pays, nul, superpositionSi ce flux doit être filtré pour que les valeurs nulles ne soient pas présentes, le résultat serait:
chien, chauve-souris, champ, pays, superpositionUn autre exemple de flux est:
1, 2, 3, 4, 5, 6, 7, 8Si ce flux doit être filtré de sorte que le résultat n'a aucun nombre inférieur ou égal à 5, le résultat serait:
6, 7, 8Un flux est une séquence d'éléments. La source du flux peut être un tableau, une collection ou une entrée à partir du disque dur ou du réseau. Le filtrage d'un flux signifie éliminer certains éléments en fonction de certains critères. De tels critères, lorsqu'ils sont codés, sont une fonction, et il est appelé un prédicat.
Contenu de l'article
Prédicat
Un prédicat est une fonction qui se traduit par un vrai ou un faux. Pour le ruisseau,
crayon, encre, coutume, personnes, chat, gâteau, foresterieLe prédicat du filtre n'a que des mots dont la longueur est supérieure à 5, peut être:
mot -> mot.le long ()> 5Word est une variable fictive et représente chaque mot dans le flux. Une fonction comme celle-ci, avec la flèche ->, est appelée une expression de lambda. Cette fonction est interprétée comme des mots dont les longueurs sont chacune supérieures à 5. La méthode de longueur d'une classe de chaîne renvoie la longueur de la chaîne.
Les mots sont lus un par un, et pour chaque cas, si la longueur du mot est supérieure à 5, toute cette expression (de «mot» à 5) entraînerait une vraie; sinon, toute l'expression entraînerait une fausse.
Pour le ruisseau,
chien, chauve-souris, nul, champ, pays, nul, superpositionLe prédicat du filtre a des mots non nuls peut être:
mot -> mot != nulCette expression signifie que le mot adressé n'est pas nul.
Pour le flux d'entiers,
1, 2, 3, 4, 5, 6, 7, 8Le prédicat du filtre, pour ne pas avoir de nombre inférieur ou égal à 5, est:
Numéro -> Numéro> = 6où le nombre fait référence à chaque numéro (à son tour). Cela signifie que tout nombre choisi doit être supérieur ou égal à 6.
En filtrant les éléments d'un flux, ce n'est pas seulement le codage de prédicat que le programmeur doit connaître. Le programmeur doit également savoir quelles structures produisent un flux et comment un flux est produit. Le tableau ou la collection est une source de flux. N'oubliez pas que les opérations d'entrée / sortie de l'ordinateur peuvent également produire un flux; Cependant, cet article ne traite pas de cela.
Certaines structures productrices de flux
Déployer
Les tableaux sont une classe destinée à gérer les tableaux. Les méthodes de tableaux prennent un tableau réel comme l'un de ses arguments. Les tableaux, en tant que classe, ont la méthode suivante:
STATIQUE PUBLIQUECeci est une méthode statique, ce qui signifie que l'objet des tableaux n'est pas instancié. Cette méthode renvoie une liste. La liste peut être considérée comme un flux non filtré ou filtré, mais ce n'est pas un vrai flux. Par exemple, dans la déclaration suivante, le LST produit à partir d'une source brute d'entiers est comme un flux non filtré:
ListeL'objet de liste a une méthode pour produire un flux non filtré avec les mêmes éléments de liste, mais en tant que flux - voir ci-dessous.
Collection
Les exemples de collections sont ArrayList et Vector. La liste elle-même est une collection à usage général.
Liste des tableaux
ArrayList, en tant que classe, a la méthode suivante:
flux par défautCette méthode renvoie un objet Stream. Le segment de code suivant l'illustre:
Liste des tableauxStre est un ruisseau non filtré.
Liste
La liste est en fait une interface; ce n'est pas une classe. Cependant, son objet peut être renvoyé par la méthode des tableaux statiques, aslist (), comme indiqué ci-dessus. L'objet liste a la méthode Stream (), qui est comme celle de l'objet ArrayList. Le segment de code suivant montre comment l'objet Liste peut renvoyer un flux:
VecteurL'objet de liste ici est renvoyé par la méthode sublist () du vecteur.
Remarque: la classe Arrays, la classe ArrayList, la classe vectorielle et l'interface de liste sont dans le Java.user.* package, qui doit être importé. Cependant, l'interface de flux est dans le java.user.flux.* package (minuscules 's'), qui doit également être importé.
La méthode filtre ()
Ainsi, un objet ArrayList ou un objet de liste peut produire un flux en utilisant leurs méthodes Stream (). Qu'est-ce qui peut produire un objet de liste? La classe des tableaux et la classe vectorielle peuvent chacun produire un objet de liste. La classe Arrays utilise sa méthode ASSList (), et la classe vectorielle utilise sa méthode sublist ().
Le flux est une interface et non une classe. L'objet Stream est renvoyé par la méthode Stream de l'objet de liste ou de l'objet ArrayList. L'objet Stream a la méthode Filter () pour le filtrage. Son argument est le prédicat. Le nouveau flux renvoyé par la méthode du filtre est le flux filtré.
L'objet Stream a de nombreuses méthodes. Deux d'entre eux sont: Count () et ForEach (). La méthode Count () renvoie le nombre d'éléments dans le flux, et la méthode foreach () est utilisée pour scanner les éléments de flux.
Le programme Java devrait commencer:
Importer Java.user.*Filtrage pour les cordes supérieures à une longueur
Le code suivant montre comment faire ceci:
VecteurLa méthode foreach () a pris une fonction lambda, dont cette fois, ce n'est pas un prédicat. La sortie filtrée est:
crayon des gens habituels foresterieFiltrage des valeurs nulles
Le code suivant montre comment il peut être fait:
Liste des tableauxLa sortie est:
Superposition country de champ de chauve-souris pour chiensFiltrage pour les plus grands entiers
Le code suivant illustre ceci:
ListeLa sortie est:
6 7 8Conclusion
La classe Arrays peut produire un objet de liste avec sa méthode ASSList (). La classe vectorielle peut produire un objet de liste avec sa méthode sublist (). Les objets List et ArrayList ont chacun la méthode Stream (). La méthode du flux renvoie le flux non filtré. L'objet Stream renvoyé a la méthode filtre () qui prend un prédicat (critères de filtrage). La méthode du filtre renvoie le flux filtré.