Adloun

programmation Java (école d'ingénieur) · Chapitre 13 · Exercice de TD

Chercher sans null

Lambdas et streams · niveau 2

Énoncé

Écrire une méthode


static Optional<Etudiant> chercher(List<Etudiant> l, String nom)

qui renvoie l'étudiant de ce nom s'il existe. L'utiliser pour afficher « Hugo a 11.0 » ou « Zoé est inconnu », sans aucun if ni appel à get().

Corrigé


import java.util.List;
import java.util.Optional;

public class Exo9Optional {
    static class Etudiant {
        private final String nom; private final double note;
        Etudiant(String nom, double note) { this.nom = nom; this.note = note; }
        String getNom() { return nom; }
        double getNote() { return note; }
    }

    static Optional<Etudiant> chercher(List<Etudiant> l, String nom) {
        return l.stream().filter(e -> e.getNom().equals(nom)).findFirst();
    }
    public static void main(String[] args) {
        List<Etudiant> promo = List.of(new Etudiant("Ada", 17), new Etudiant("Hugo", 11));
        for (String nom : List.of("Hugo", "Zoé")) {
            String msg = chercher(promo, nom)
                    .map(e -> nom + " a " + e.getNote())
                    .orElse(nom + " est inconnu");
            System.out.println(msg);
        }
    }
}

Hugo a 11.0
Zoé est inconnu

Le type de retour Optional<Etudiant> dit à l'appelant que la recherche peut échouer : il ne peut pas l'oublier, comme il oublierait un null. map transforme l'étudiant trouvé en message (et laisse vide un Optional vide), puis orElse fournit le message du cas vide. La variable nom de la boucle est capturée par la lambda : elle est effectivement finale, puisqu'une nouvelle variable est créée à chaque tour.

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 →