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
- 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.