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 ?
<code class="java">List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");</code>
Le résultat devrait être :
<code class="java">{ciao=2, hello=1, bye=2}</code>
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.
<code class="java">Map<String, Long> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
Ou pour les valeurs entières :
<code class="java">Map<String, Integer> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
EDIT
J'ai également ajouté comment trier la carte par valeur :
<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>
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!