programmation Java (école d'ingénieur) · Chapitre 13 · Application directe du cours
Suivre un pipeline
Lambdas et streams · niveau 3 (difficile)
Énoncé
Prévoir exactement ce qu'affiche le programme suivant, puis le vérifier. Combien de fois la lambda de filter est-elle appelée ? Et celle de map ?
List<String> r = List.of("ours", "chat", "loup", "cerf", "lion").stream()
.filter(m -> { System.out.println("filter " + m);
return m.startsWith("l") || m.startsWith("c"); })
.map(m -> { System.out.println("map " + m); return m.toUpperCase(); })
.limit(2)
.collect(Collectors.toList());
System.out.println(r);Corrigé
filter ours
filter chat
map chat
filter loup
map loup
[CHAT, LOUP]
Chaque mot traverse le pipeline à son tour. ours est écarté par le filtre ; chat passe le filtre, puis map ; limit(2) a reçu son premier élément. loup fait de même, et limit(2) en a deux : le stream s'arrête. cerf et lion ne sont jamais examinés, bien que cerf et lion vérifient le filtre. La lambda de filter est appelée fois, celle de map fois. On n'a pas « filtré toute la liste, puis transformé, puis coupé » : c'est l'évaluation paresseuse.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.