Correction Question 1 Classe Personne : package eg.ufe.gestion; /** * Une personne. */ public class Personne { private int id; private String nom; private String sexe; private static int numPrecedent; public Personne(String nom, String sexe) { this.nom = nom; if (! (sexe.equals("H") || sexe.equals("F"))) { throw new IllegalArgumentException("Le sexe doit être égal à 'H' ou 'F'"); } this.sexe = sexe; this.id = ++numPrecedent; } public String getNom() { return nom; } public int getId() { return id; } public String getSexe() { return sexe; } } @Override public String toString() { return "Personne{" + "id=" + id + ", nom=" + nom + ", sexe=" + sexe + '}'; } Question 2 package eg.ufe.gestion; public class Main { public static void main(String[] args) { Personne mohamed = new Personne("Mohamed", "H"); Personne sarah = new Personne("Sarah", "F"); System.out.println(mohamed.getNom() + " et " + sarah.getNom() + " sont 2 personnes"); } } Question 3 package eg.ufe.gestion.universite; 4 import eg.ufe.gestion.Personne; /** * Un étudiant. */ public class Etudiant extends Personne { private double moyenne; public Etudiant(String nom, String sexe, double moyenne) { super(nom, sexe); this.moyenne = moyenne; } public double getMoyenne() { return moyenne; } @Override public String toString() { return "Etudiant{" + "id=" + this.getId() + ", nom=" + this.getNom() + ", sexe=" + this.getSexe() + ", moyenne=" + moyenne + '}'; } } package eg.ufe.gestion.universite; import eg.ufe.gestion.Personne; import java.util.List; /** * Un enseignant. */ public class Enseignant extends Personne { private List<String> matieresEnseignees = new ArrayList<>(); public Enseignant(String nom, String sexe) { super(nom, sexe); } } @Override public String toString() { return "Enseignant{" + "id=" + this.getId() + ", nom=" + this.getNom() + ", sexe=" + this.getSexe() + "matieresEnseignees=" + matieresEnseignees + '}'; } Question 4 import java.util.ArrayList; import java.util.Iterator; ... public void ajouterMatiere(String matiere) { if (matieresEnseignees.contains(matiere)) { throw new IllegalArgumentException("Matière déjà enregistrée"); } matieresEnseignees.add(matiere); } public Iterator<String> iterateurMatieres() { 5 return matieresEnseignees.iterator(); } On aurait pu remplacer List par Set, ce qui aurait évité d’avoir à chercher si la matière était déjà enregistrée. Question 5 package eg.ufe.gestion.universite; import java.util.Iterator; public class Main { public static void main(String[] args) { Enseignant e = new Enseignant("Mohamed", "H"); e.ajouterMatiere("Informatique"); e.ajouterMatiere("Gestion"); Iterator<String> it = e.iterateurMatieres(); while (it.hasNext()) { System.out.println(it.next()); } } } Question 6 public static String meilleureEtudiante(List<Etudiant> etudiants) { String result = null; double max = -1.0; for (Etudiant etudiant : etudiants) { if (etudiant.getSexe().equals("F")) { if (etudiant.getMoyenne() > max) { // peut être réuni avec test précédent max = etudiant.getMoyenne(); result = etudiant.getNom(); } } } return result; } public static String meilleureEtudianteLambda(List<Etudiant> etudiants) { return etudiants.stream().filter(e -> e.getSexe().equals("F")) .max(Comparator.comparing(e -> e.getMoyenne())) .get().getNom(); } Question 7 La méthode meilleureEtudianteLambda ne peut pas recevoir un paramètre de type List<EtudiantAvecMaster> car ce type n’est pas un sous-type de List<Etudiant> (voir cours sur la généricité). Pour améliorer la méthode meilleureEtudianteLambda il suffit de mettre le type du paramètre à List<? extends Etudiant> au lieu de List<Etudiant>. 6