Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →