Adloun

programmation Java (école d'ingénieur) · Chapitre 13 · Application directe du cours

Un classement en une ligne

Lambdas et streams · niveau 2

Énoncé

On reprend le championnat de l'exercice 12.11 : points décroissants, puis différence de buts décroissante, puis nom croissant. En munissant la classe Equipe d'accesseurs getNom, getPoints et getDifference, écrire le comparateur en une seule expression avec Comparator.comparingInt, thenComparingInt, reversed et thenComparing. Expliquer précisément la place de reversed().

Corrigé


import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Exo3Classement {
    static class Equipe {
        private final String nom; private final int points, difference;
        Equipe(String nom, int points, int difference) {
            this.nom = nom; this.points = points; this.difference = difference;
        }
        String getNom() { return nom; }
        int getPoints() { return points; }
        int getDifference() { return difference; }
        @Override public String toString() { return nom + " " + points + " pts (" + difference + ")"; }
    }
    public static void main(String[] args) {
        List<Equipe> l = new ArrayList<>(List.of(new Equipe("Lyon", 20, 5),
            new Equipe("Brest", 23, 2), new Equipe("Nice", 20, 9), new Equipe("Lens", 20, 5)));
        l.sort(Comparator.comparingInt(Equipe::getPoints)
                         .thenComparingInt(Equipe::getDifference)
                         .reversed()
                         .thenComparing(Equipe::getNom));
        l.forEach(System.out::println);
    }
}

Brest 23 pts (2)
Nice 20 pts (9)
Lens 20 pts (5)
Lyon 20 pts (5)

reversed() inverse tout le comparateur construit avant lui : l'ordre par points puis par différence devient « points décroissants, puis différence décroissante », exactement ce que l'on veut. Le critère du nom est ajouté après reversed() : il n'est pas inversé et reste croissant. Placer reversed() à la fin aurait aussi inversé l'ordre alphabétique (Lyon avant Lens). Le résultat est identique à celui de l'exercice 12.11, avec une classe comparateur en moins.

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 →