Adloun

programmation Java (école d'ingénieur) · Chapitre 13 · Exercice de TD

Les mots les plus fréquents

Lambdas et streams · niveau 3 (difficile)

Énoncé

Afficher les trois mots les plus fréquents du texte le chat voit le chien et le chien voit le chat puis le chat dort, avec leur nombre d'occurrences, du plus fréquent au moins fréquent ; à égalité, par ordre alphabétique. Tout doit être écrit avec des streams : comptage par groupingBy, puis tri des entrées du dictionnaire.

Corrigé


import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Exo6Frequents {
    public static void main(String[] args) {
        String texte = "le chat voit le chien et le chien voit le chat puis le chat dort";
        Map<String, Long> freq = Arrays.stream(texte.split(" "))
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        freq.entrySet().stream()
                .sorted(Map.Entry.<String, Long>comparingByValue().reversed()
                        .thenComparing(Map.Entry.comparingByKey()))
                .limit(3)
                .forEach(e -> System.out.println(e.getKey() + " : " + e.getValue()));
    }
}

le : 5
chat : 3
chien : 2
  • Function.identity() est la fonction m -> m : chaque mot est sa propre clé.
  • On trie ensuite les entrées du dictionnaire. Pour cela, Map.Entry fournit deux comparateurs tout faits, comparingByValue() et comparingByKey(), qui comparent par valeur et par clé. L'écriture Map.Entry.<String, Long>comparingByValue() indique explicitement les types : sans eux, le compilateur ne peut pas les déduire avant l'appel à reversed().
  • chien et voit apparaissent tous deux deux fois ; l'ordre alphabétique retient chien.

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 →