Maison >Java >javaDidacticiel >Comment puis-je compter efficacement les fréquences de mots dans Java 8 à l'aide de flux ?

Comment puis-je compter efficacement les fréquences de mots dans Java 8 à l'aide de flux ?

DDD
DDDoriginal
2024-11-03 12:33:02610parcourir

How can I efficiently count word frequencies in Java 8 using streams?

Comptage de la fréquence des mots en Java 8 : une approche simplifiée

En Java 8, compter la fréquence des mots dans une liste peut être réalisé avec élégance en utilisant des flux.

Considérez l'exemple de liste suivant : List wordList = Lists.newArrayList("bonjour", "bye", "ciao", "bye", "ciao");. Pour compter les fréquences de mots, nous utilisons les collecteurs Collectors.groupingBy et Collectors.counting.

<code class="java">Map<String, Long> wordFrequencies = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>

Ce code regroupe d'abord les éléments de la liste en fonction de leur identité de chaîne, créant ainsi une carte où les clés sont des mots uniques et les valeurs sont leurs comptes. Le collecteur Collectors.counting incrémente automatiquement le nombre pour chaque mot.

La carte résultante, wordFrequencies, ressemblera à {ciao=2, hello=1, bye=2} une fois imprimée.

Alternativement , pour les nombres entiers :

<code class="java">Map<String, Integer> wordFrequencies = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>

Cette variante utilise Collectors.summingInt pour accumuler des nombres entiers.

Pour trier la carte résultante par valeur, nous pouvons enchaîner des flux et des collecteurs supplémentaires :

<code class="java">LinkedHashMap<String, Long> countByWordSorted = wordFrequencies.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 tri garantit que les mots les plus fréquents apparaissent en premier sur la carte.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn