Les flux Java 8 permettent aux développeurs d'extraire des données précises d'une grande collection, à l'aide d'un ensemble d'opérations prédéfinies.
Avant la sortie de Java 8, l'utilisation du terme «flux» en Java serait automatiquement associée aux E / S. Cependant, Java 8 a introduit un flux que l'on peut appeler un ensemble d'étapes de calcul enchaînées dans ce que l'on appelle communément un «pipeline de flux».
Cet article vous présentera les flux Java 8 et vous montrera comment ils peuvent être utiles dans vos projets.
Qu'est-ce qu'un flux?
Un flux est une interface Java qui prend une source, effectue un ensemble d'opérations pour extraire des données spécifiques, puis fournit ces données à l'application pour utilisation. Essentiellement, il vous permet d'extraire des données spécialisées à partir d'une collection de données généralisées.
Comment fonctionnent les flux
Un pipeline de flux commence toujours par une source. Le type de source dépend du type de données avec lesquelles vous traitez, mais deux des plus populaires sont les tableaux et les collections.
Pour transformer la collection en un flux initial, vous devrez ajouter le flux() fonction à la source. Cela placera la source dans le pipeline de flux où plusieurs opérations intermédiaires différentes (telles que filtre() et sorte()) peut fonctionner dessus.
Une fois toutes les opérations intermédiaires requises effectuées, vous pouvez introduire une opération de terminal (telle que pour chaque()), qui produira les données précédemment extraites de la source.
La vie sans ruisseaux
Java 8 est sorti en 2014, mais avant cela, les développeurs Java devaient encore extraire des données spécialisées d'une collection de données générales.
Supposons que vous ayez une liste de caractères aléatoires qui sont combinés avec des nombres aléatoires pour former des valeurs de chaîne uniques, mais vous ne voulez que les valeurs commençant par le caractère «C» et vous voulez organiser le résultat par ordre croissant ordre. C'est ainsi que vous extrairiez ces données sans flux.
En rapport: Ce que vous devez savoir sur l'utilisation des chaînes en Java
Exemple de filtrage et de tri des valeurs sans flux
import java.util. Liste des tableaux;
import java.util. Tableaux;
import java.util. Lister;
classe publique Main {
public static void main (String [] args) {
// déclare et initialise la liste des tableaux
Lister randomValues = Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "C13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "C16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// déclare que la liste des tableaux stockera les valeurs nécessaires
Lister requiredValues = new ArrayList <> ();
// extraire les valeurs requises et les stocker dans reqquiredValues
randomValues.forEach (valeur -> {
if (valeur.startsWith ("C")) {
requiredValues.add (valeur);
}
});
// trie les valeurs requises par ordre croissant
requiredValues.sort ((String value1, String value2) -> value1.compareTo (value2));
// affiche chaque valeur sur la console
requiredValues.forEach ((valeur de chaîne) -> System.out.println (valeur));
}
}
Vous devrez également déclarer et initialiser la liste des tableaux, que vous utilisiez des flux ou une autre méthode d'extraction. Ce que vous n’auriez pas besoin de faire si vous utilisiez des flux, c’est de déclarer une nouvelle variable contenant les valeurs requises, ni de créer les cinq autres lignes de code dans l’exemple ci-dessus.
En rapport: Comment créer et exécuter des opérations sur des tableaux en Java
Le code ci-dessus produit la sortie suivante dans la console:
C11
C12
C13
C14
C15
C16
La vie avec les ruisseaux
En programmation, l'efficacité signifie produire le même résultat avec beaucoup moins de code. C'est exactement ce que fait un pipeline de flux pour un programmeur. Alors, la prochaine fois que quelqu'un vous demandera: "Pourquoi est-il important d'utiliser des flux dans votre projet?" En termes simples: «les flux prennent en charge une programmation efficace.»
En continuant avec notre exemple ci-dessus, voici comment l'introduction de flux transforme l'ensemble du programme.
Filtrage et tri des valeurs avec un exemple de flux
import java.util. Tableaux;
import java.util. Lister;
classe publique Main {
public static void main (String [] args) {
// déclare et initialise la liste des tableaux
Lister randomValues = Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "C13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "C16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// récupère uniquement les valeurs commençant par C, les trie et les imprime sur la console.
randomValues.stream (). filter (valeur-> valeur.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}
Le code ci-dessus montre à quel point l'interface de flux est puissante. Il prend une liste de valeurs de tableau aléatoires et la transforme en un flux en utilisant le flux() une fonction. Le flux est ensuite réduit à une liste de tableaux contenant les valeurs requises (qui sont toutes les valeurs commençant par C), en utilisant le filtre() une fonction.
Comme vous pouvez le voir dans l'exemple ci-dessus, le C les valeurs sont disposées aléatoirement dans la liste des tableaux. Si vous deviez imprimer le flux à ce stade du pipeline, la valeur C15 serait imprimé en premier. Par conséquent, la sorte() La fonction est introduite dans le pipeline de flux pour réorganiser le nouveau tableau dans l'ordre croissant.
La fonction finale du pipeline de flux est un pour chaque() une fonction. Il s'agit d'une fonction de terminal utilisée pour arrêter le pipeline de flux et qui produit les résultats suivants dans la console:
C11
C12
C13
C14
C15
C16
Il existe une longue liste d'opérations intermédiaires pouvant être utilisées dans un pipeline de flux.
Un pipeline de flux commence toujours par une source unique et un flux() fonction, et se termine toujours par une seule opération de terminal (bien qu'il y en ait plusieurs Choisissez parmi.) Mais entre ces deux sections se trouve une liste de six opérations intermédiaires que vous pouvez utiliser.
Dans notre exemple ci-dessus, seules deux de ces opérations intermédiaires sont utiliséesfiltre() et sorte(). L'opération intermédiaire que vous choisissez dépendra des tâches que vous souhaitez effectuer.
Si l'une des valeurs commençant par «C» dans notre liste de tableaux ci-dessus était en minuscules et que nous effectuions les mêmes opérations intermédiaires sur elles, nous obtiendrions le résultat suivant.
Exécution d'opérations de filtrage et de tri sur des valeurs minuscules Exemple
import java.util. Tableaux;
import java.util. Lister;
classe publique Main {
public static void main (String [] args) {
// déclare et initialise la liste des tableaux
Lister randomValues = Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "c13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "c16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// récupère uniquement les valeurs commençant par C, les trie et les imprime sur la console.
randomValues.stream (). filter (valeur-> valeur.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}
Le code ci-dessus produira les valeurs suivantes dans la console:
C11
C12
C14
C15
Le seul problème avec la sortie ci-dessus est qu'elle ne représente pas avec précision tous les C valeurs dans notre liste de tableaux. Un bon moyen de corriger cette petite erreur est d'introduire une autre opération intermédiaire dans le pipeline de flux; cette opération est connue sous le nom de carte() une fonction.
Utilisation de l'exemple de fonction de carte
import java.util. Tableaux;
import java.util. Lister;
classe publique Main {
public static void main (String [] args) {
// déclare et initialise la liste des tableaux
Lister randomValues = Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "c13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "c16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// transforme tous les caractères minuscules en majuscules,
// récupère uniquement les valeurs commençant par C, les trie et les imprime sur la console.
randomValues.stream (). map (String:: toUpperCase) .filter (valeur-> valeur.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}
le carte() la fonction transforme un objet d'un état à un autre; dans notre exemple ci-dessus, il transforme tous les caractères minuscules de la liste des tableaux en caractères majuscules.
Placer le carte() fonction juste avant le filtre() La fonction récupère toutes les valeurs commençant par C dans la liste des tableaux.
Le code ci-dessus produit le résultat suivant dans la console, représentant avec succès tous les C valeurs dans la liste des tableaux.
C11
C12
C13
C14
C15
C16
Les trois autres opérations intermédiaires que vous pouvez utiliser dans vos applications incluent:
- coup d'oeil ()
- limite()
- sauter()
Les flux Java 8 facilitent la création d'un code efficace
Avec les flux Java 8, vous pouvez extraire des données supplémentaires spécifiques et pertinentes à partir d'une source volumineuse avec une seule ligne de code. Tant que vous incluez l'initiale flux() fonction et un opérateur de terminal, vous pouvez utiliser n'importe quelle combinaison d'opérations intermédiaires qui fournissent des sorties adaptées à votre objectif.
Si vous vous interrogez sur la ligne de code incluse dans notre filtre() une fonction; c'est ce qu'on appelle une «expression lambda». Les expressions Lambda sont une autre fonctionnalité introduite avec Java 8, et elles contiennent de nombreuses pépites que vous pourriez trouver utiles.
Si vous êtes un programmeur Java et que vous souhaitez en savoir plus sur les lambdas Java 8, dans cet article, nous allons examiner de plus près la syntaxe et l'utilisation de lambda.
Lire la suite
- Programmation
- Java
- Tutoriels de codage
Kadeisha Kean est un développeur de logiciels Full-Stack et un rédacteur technique / technologique. Elle a la capacité distincte de simplifier certains des concepts technologiques les plus complexes; produire du matériel facilement compréhensible par tout novice en technologie. Elle est passionnée par l'écriture, le développement de logiciels intéressants et les voyages à travers le monde (à travers des documentaires).
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives!
Un pas de plus…!
Veuillez confirmer votre adresse e-mail dans l'e-mail que nous venons de vous envoyer.