Adloun

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

Statistiques de notes

Lambdas et streams · niveau 2

Énoncé

À partir de la liste de notes [12.5, 8.0, 15.5, 17.0, 9.5, 11.0, 14.0, 16.5], calculer avec des streams le nombre de notes, leur moyenne (deux décimales), la note maximale, le nombre de reçus (note au moins égale à ), et le nombre de notes par mention (TB à partir de , B de , AB de , P de , AJ en dessous), les mentions étant affichées dans l'ordre alphabétique.

Corrigé


import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class Exo5Statistiques {
    static String mention(double n) {
        if (n >= 16) return "TB";
        if (n >= 14) return "B";
        if (n >= 12) return "AB";
        if (n >= 10) return "P";
        return "AJ";
    }
    public static void main(String[] args) {
        List<Double> notes = List.of(12.5, 8.0, 15.5, 17.0, 9.5, 11.0, 14.0, 16.5);
        System.out.println("nombre : " + notes.size());
        System.out.printf("moyenne : %.2f%n",
                notes.stream().mapToDouble(Double::doubleValue).average().orElse(0));
        System.out.println("max : " + notes.stream().mapToDouble(x -> x).max().getAsDouble());
        System.out.println("reçus : " + notes.stream().filter(n -> n >= 10).count());
        Map<String, Long> parMention = notes.stream()
                .collect(Collectors.groupingBy(Exo5Statistiques::mention, TreeMap::new,
                                               Collectors.counting()));
        System.out.println(parMention);
    }
}

nombre : 8
moyenne : 13.00
max : 17.0
reçus : 6
{AB=1, AJ=2, B=2, P=1, TB=2}
  • mapToDouble passe d'un Stream<Double> à un DoubleStream, qui sait calculer average() et max(). Ces deux opérations renvoient un OptionalDouble (la liste pourrait être vide) : orElse(0) et getAsDouble() en extraient la valeur.
  • La somme des notes vaut , d'où la moyenne .
  • groupingBy prend ici trois arguments : la fonction qui calcule la clé (une référence à la méthode mention), la fabrique du dictionnaire (TreeMap::new, pour l'ordre alphabétique) et le collecteur appliqué à chaque groupe (counting()).

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 →