Streams en Java
Démarrez un pipeline à partir d'une liste avec stream(), gardez ou transformez les éléments, puis imprimez. Dans Pipe.java, gardez la classe publique Pipe, importez java.util.ArrayList, stockez "oak" et "pine", et appelez names.stream().filter(n -> n.startsWith("o")).forEach(n -> System.out.println(n));. Compilez avec javac Pipe.java et lancez java Pipe. L'écran doit montrer oak. Une seconde démo utilise map pour que l'écran montre OAK, puis PINE. Laissez Records optionnel pour la page suivante. Cette leçon est un pipeline stream, pas un simple forEach sur la liste et pas une démo Generics get(0).
Filtrer un mot qui correspond
Ouvrez Pipe.java. Gardez le nom de classe publique Pipe. Supprimez les démos lambda Cue restantes, les impressions Generics Bin restantes, les lancements Program Arguments Flag restants, et les invites Scanner Box si elles enterrent l'histoire des streams. Le programme ne doit pas attendre une saisie clavier et ne doit pas exiger des mots de lancement.
Ajoutez l'import en tête :
import java.util.ArrayList;
Dans Pipe.main, construisez une liste typée avec deux mots, puis démarrez un stream qui garde les mots commençant par o :
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.add("pine");
names.stream().filter(n -> n.startsWith("o")).forEach(n -> System.out.println(n));
stream() ouvre le pipeline. filter garde les éléments dont la lambda renvoie true. forEach imprime chaque élément gardé. "oak" commence par o. "pine" non. L'écran montre oak.
import java.util.ArrayList;
public class Pipe {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.add("pine");
names.stream().filter(n -> n.startsWith("o")).forEach(n -> System.out.println(n));
}
}
Depuis le dossier qui contient Pipe.java, lancez javac Pipe.java. Quand accolades et points-virgules correspondent, javac n'écrit aucune ligne propre. Puis lancez java Pipe — pas java Pipe.java. Gardez une seule classe publique pour que le nom corresponde à Pipe.
Parcourez l'exécution une fois. Java démarre à Pipe.main. La liste contient "oak" et "pine". stream() commence. filter garde "oak". forEach imprime oak. Rien n'imprime les deux mots. Rien n'appelle seulement names.forEach sans stream(). Rien ne lit args[0].
Dites la règle débutant en regardant l'écran : stream() ouvre le tuyau ; filter choisit ; forEach termine avec un effet de bord d'impression. N'inventez pas de démos Records sur cette page. Records attend la prochaine leçon optionnelle. Ne supprimez pas stream() en espérant que filter s'accroche à la liste elle-même dans cette forme pédagogique.
Si vous voyez encore oak puis pine à cause d'un fichier Cue forEach restant, passez à Pipe et gardez l'étape filter. Si javac rejette stream, confirmez que le type de liste est ArrayList et l'appel est names.stream().
Mapper chaque mot en majuscules
Gardez la même classe publique Pipe. Changez le pipeline pour transformer chaque mot au lieu de filtrer :
names.stream().map(n -> n.toUpperCase()).forEach(n -> System.out.println(n));
Gardez "oak" et "pine" dans la liste. Recompilez avec javac Pipe.java et lancez java Pipe. L'écran montre OAK, puis PINE. map renvoie une nouvelle valeur pour chaque élément. forEach imprime ces valeurs dans l'ordre.
import java.util.ArrayList;
public class Pipe {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.add("pine");
names.stream().map(n -> n.toUpperCase()).forEach(n -> System.out.println(n));
}
}
Parcourez l'exécution une fois. La première valeur mappée est OAK. La seconde est PINE. Gardez les deux démos comme deux formes pédagogiques. D'abord prouvez que filter garde un mot. Ensuite prouvez que map change chaque mot. Les deux formes partagent import, liste typée, stream(), et un forEach terminal.
Si vous enchaînez filter et map dans vos propres essais plus tard, l'ordre compte. Cette page garde une seule étape intermédiaire par démo pour que l'écran reste facile à lire.
Habitudes de pipeline
Gardez les étapes dans l'ordre pendant la pratique.
📊 Habitudes stream pour Pipe
| Étape | Appel | Contrôle débutant |
|---|---|---|
| Démarrer | names.stream() |
ouvre le pipeline depuis la liste |
| En garder certains | filter(n -> ...) |
la lambda renvoie true pour garder |
| Changer chacun | map(n -> ...) |
la lambda renvoie la nouvelle valeur |
| Terminer l'impression | forEach(n -> System.out.println(n)) |
étape terminale qui imprime |
Sauter stream() |
la liste n'a pas de filter dans cette forme |
mettez stream() avant filter ou map |
Streams n'est pas Lambda seul et pas Records
Lambda a enseigné forEach directement sur la liste. Streams met stream() en premier pour que vous puissiez filter ou map avant le forEach final. Records introduira un type de données compact sur une page optionnelle ultérieure. Ne mélangez pas ces trois rôles dans un seul fichier débutant aujourd'hui.
oak gardé par filter reste un élément de liste qui traverse un pipeline. Ce n'est pas args[0] de Flag. Quand un fichier Cue restant imprime chaque élément sans filter, laissez-le comme historique et gardez la ligne stream().filter de Pipe.
Sans stream(), les appels filter et map de cette page ne sont pas la forme pédagogique. Sans un forEach terminal, le pipeline n'imprime pas. Gardez les deux extrémités du tuyau ensemble pendant que vous pratiquez chaque démo. Gardez la syntaxe Records hors de cette page jusqu'à cette leçon, même si vous avez déjà parcouru un titre sur les types de données compacts ailleurs sur le parcours optionnel.
Vérifications du dossier avant Records
Listez le dossier après une compilation réussie. Vous devez voir Pipe.java et Pipe.class ensemble. Modifiez la source, enregistrez, lancez javac Pipe.java, puis java Pipe. Un .class obsolète peut montrer un ancien écran filter si vous sautez la compilation après être passé à map.
Si javac se plaint de classes publiques en double, gardez seulement Pipe publique. Si l'écran montre oak et pine sur la démo filter, le contrôle startsWith("o") peut manquer — restaurez la lambda filter. Si rien ne s'affiche, confirmez que add a été appelé avant stream().
Ne collez pas le forEach liste seule de Cue comme remplacement du pipeline entier sur cette page. Ne collez pas le get(0) de Bin dans Pipe. Le travail streams optionnel, c'est stream plus une étape intermédiaire plus forEach.
Avant Records optionnel
Vous pouvez garder la classe publique Pipe, importer ArrayList, ajouter "oak" et "pine", appeler names.stream().filter(n -> n.startsWith("o")).forEach(...), voir oak, puis appeler names.stream().map(n -> n.toUpperCase()).forEach(...), voir OAK puis PINE. Compilez avec javac Pipe.java et lancez java Pipe. Le tableau sépare démarrer, filter, map et terminer. La page optionnelle suivante est Records.
Gardez les démos Pipe pour une paire streams claire. Gardez les fichiers lambda Cue hors de cette page quand vous pratiquez les pipelines. Gardez les fichiers Generics Bin hors de cette page quand vous pratiquez les pipelines. Gardez le travail Records hors de cette page jusqu'à cette leçon. Ces habitudes sont le point de contrôle avant la suite. Quand l'écran filter montre oak ou l'écran map montre OAK puis PINE, Streams a fait son travail pour cette leçon et vous êtes prêt pour Records si vous continuez le parcours optionnel.
Un dernier passage dans le dossier : un seul Pipe public, import présent, ArrayList<String> typée, stream() avant filter ou map, forEach terminal, pas d'attente Scanner, pas de mots de lancement requis. Lancez encore javac Pipe.java et java Pipe sur la démo ouverte. Si l'écran montre toujours oak ou OAK puis PINE, la forme Streams est solide et le cours peut passer à Records optionnel sur la page suivante. Préférez une habitude pipeline claire par lecture pour que chaque passage enseigne la même carte.
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut