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

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

Barbara Streisand
Libérer: 2024-10-31 05:54:30
original
473 Les gens l'ont consulté

How to Count Word Frequencies in Java 8 Using Streams?

Comptage de la fréquence des mots dans Java 8 à l'aide de flux

Compter la fréquence des mots dans une liste est une tâche courante dans le traitement de texte. Dans Java 8, cela peut être réalisé efficacement en utilisant les méthodes Collectors.groupingBy() et Collectors.counting().

Pour trouver la fréquence des mots dans une liste de chaînes, vous pouvez suivre les étapes suivantes :

  1. Appelez stream() sur la liste pour créer un flux.
  2. Regroupez les éléments du flux par leurs valeurs en utilisant Collectors.groupingBy(Function.identity()).
  3. Comptez les occurrences de chaque mot à l'aide de Collectors.counting().

Par exemple, étant donné la liste de mots suivante :

List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");
Copier après la connexion

Vous pouvez calculer les fréquences des mots comme suit :

Map<String,Long> wordFrequencies = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Copier après la connexion

Cela produira une carte avec les fréquences des mots, où les clés sont les mots et les valeurs sont le nombre d'occurrences. Le résultat pour la liste donnée serait :

{ciao=2, hello=1, bye=2}
Copier après la connexion

Pour trier la carte par valeurs, vous pouvez utiliser LinkedHashMap et la méthode EntrySet() pour collecter les entrées de la carte dans un flux. Ensuite, utilisez sorted() pour trier les entrées par valeur dans l'ordre décroissant et Collectors.toMap() pour les collecter dans un nouveau LinkedHashMap :

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

Cela produira une carte triée où les mots sont classés par leur fréquence.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal