Maison  >  Article  >  Java  >  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
Barbara Streisandoriginal
2024-10-31 05:54:30431parcourir

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");

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

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

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}

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
    ));

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!

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