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
Libérer: 2024-11-03 12:33:02
original
609 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal