Comptage de la fréquence des mots en Java 8
Comment compter la fréquence d'un mot dans une liste en utilisant Java 8 ?
1 | <code class = "java" >List<String> wordsList = Lists.newArrayList( "hello" , "bye" , "ciao" , "bye" , "ciao" );</code>
|
Copier après la connexion
Le résultat devrait être :
1 | <code class = "java" >{ciao=2, hello=1, bye=2}</code>
|
Copier après la connexion
Au début, je m'attendais à utiliser la méthode map et réduire, mais la méthode réelle est légèrement différente.
1 2 | <code class = "java" >Map<String, Long> collect = wordsList.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
|
Copier après la connexion
Ou pour les valeurs entières :
1 2 | <code class = "java" >Map<String, Integer> collect = wordsList.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
|
Copier après la connexion
EDIT
J'ai également ajouté comment trier la carte par valeur :
1 2 3 4 5 6 7 8 9 10 11 | <code class = "java" >LinkedHashMap<String, Long> countByWordSorted = collect.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(v1, v2) -> {
throw new IllegalStateException();
},
LinkedHashMap:: new
));</code>
|
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!