Page Home (contact) Retour TPs
Dans la méthode main
d'une classe Main
initialisez un tableau de nombres entiers avec les premiers nombres impairs, en utilisant la méthode setAll
de java.util.Arrays
, et une expression lambda en paramètre qui donne la valeur du ième élément du tableau en fonction de i.
Par exemple si le tableau est de taille 3, il contiendra les nombres 1, 3, 5.
Pour tester faites afficher les éléments du tableau en utilisant la méthode Arrays.toString
.
Vous allez compléter la méthode main
de cette classe Main pour trier la liste de villes. Vous ne devez pas modifier le code de la classe Ville.
Comparator
. Utilisez la classe Collections
(ne l'utilisez pas pour les 2 questions suivantes).Vous allez compléter la méthode main
de cette classe pour trier la liste d'étudiants. Vous ne devez pas modifier le code de la classe Etudiant.
etudiants.sort(Comparator.comparing(e -> e.getAnPromo()));Étudiez la javadoc de la méthode comparing de l'interface
Comparator
et testez ce code. La méthode comparing
retourne un comparateur qui compare suivant la valeur retournée par l'expression lambda.comparingInt
à la place de comparing
. Tester le bon fonctionnement.Comparator
, tri décroissant des étudiants par année de promotion. Testez d'abord avec la référence de méthode, puis testez avec l'expression lambda de la première question. Remarque : pour l'expression lambda, vous serez peut-être obligé de déclarer le type de la variable de l'expression lambda.Comparator
, tri décroissant des étudiants par année de promotion, et pour chaque année de promotion, tri croissant par moyenne. Donnez une solution avec des expressions lambda et une solution avec des références de méthode. Est-ce qu'il n'existe pas une meilleure méthode que thenComparing
dans l'interface Comparator
(pensez à ce que vous avez fait dans la question 2).Question 3
Question 4
Question 5
Avec la classe Etudiant, on veut faire afficher la meilleure moyenne des étudiants de la promotion de l'année 2013.
L'idée du code :
double max = etudiants .filter(e -> e.getAnPromo() == 2013) .map(e -> e.getMoyenne()) .max();
Mais on a vu en cours qu'il faut passer par les streams pour utiliser les expressions lambda pour filtrer ou faire un "mapping". On remplace donc le code par celui-ci :
double max = etudiants.stream() .filter(e -> e.getAnPromo() == 2013) .map(e -> e.getMoyenne()) .max();
Testez en complétant ce code. Vous comprenez le message d'erreur ? Corrigez le code. Si vous ne voyez pas, lisez ces indications.
Écrivez une méthode qui retourne la meilleure moyenne des étudiants d'une promotion dont l'année est passée en paramètre (la liste des étudiants est aussi passée en paramètre). Testez.
Montrez que le paramètre doit être effectivement final pour que le code compile.
max est une opération terminale de type "reduce" (produit une nouvelle valeur après chaque traitement d'un élément du stream). Nous allons écrire une expression lambda qui utilise une opération terminale de type "collect" (les informations sont collectées dans un container).
Vous allez utiliser la classe Etudiant. Testez en complétant ce code.
Écrivez un méthode qui prend en paramètre une liste d'étudiants, une année de promotion et une valeur de type double et qui retourne une liste des étudiants qui ont une moyenne supérieur à la valeur de type double passée en paramètre. De plus cette liste retournée sera triée par moyenne décroissante. Vous utiliserez pour cela des expressions lambda et des streams.
Si vous n'y arrivez pas aisément, commencez par récupérer tous les étudiants d'une promotion dans une liste. Testez. Ensuite récupérez seulement ceux qui ont une moyenne supérieure à une certaine moyenne (avant de récupérer les étudiants dans une liste il faut les filtrer). Ensuite vous triez la liste par moyenne croissante et finalement par moyenne décroissante.
Tutoriel Oracle sur les expressions lambda
Exercices donnés dans le MOOC Oracle sur les expressions lambda