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 fonctionm -> m: chaque mot est sa propre clé.- On trie ensuite les entrées du dictionnaire. Pour cela,
Map.Entryfournit deux comparateurs tout faits,comparingByValue()etcomparingByKey(), qui comparent par valeur et par clé. L'écritureMap.Entry.<String, Long>comparingByValue()indique explicitement les types : sans eux, le compilateur ne peut pas les déduire avant l'appel àreversed(). chienetvoitapparaissent tous deux deux fois ; l'ordre alphabétique retientchien.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.