Maison > Java > javaDidacticiel > Comment l'API Stream de Java 8 peut-elle être utilisée pour compter efficacement la fréquence des mots dans une liste ?

Comment l'API Stream de Java 8 peut-elle être utilisée pour compter efficacement la fréquence des mots dans une liste ?

Susan Sarandon
Libérer: 2024-11-03 14:51:02
original
1002 Les gens l'ont consulté

How can Java 8's Stream API be used to efficiently count word frequencies in a list?

Implémentation Java 8 pour le comptage de la fréquence des mots

Identifier la fréquence des mots dans une liste donnée est une tâche essentielle dans le traitement du langage naturel. Java 8 offre une approche polyvalente pour compter efficacement les occurrences de mots à l'aide de son API de flux robuste et de ses collecteurs intégrés.

Problème :

Considérez la liste de mots suivante :

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

L'objectif est de déterminer la fréquence de chaque mot, ce qui donne un résultat comme :

<code class="java">{ciao=2, hello=1, bye=2}</code>
Copier après la connexion

Solution Java 8 :

Contrairement aux méthodes conventionnelles, Java 8 utilise une approche différente :

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

Dans cette ligne de code, la méthode stream() est utilisée pour lancer un flux d'éléments à partir de la liste de mots. Par la suite, Collectors.groupingBy() rassemble les éléments en fonction de leur identité (les mots eux-mêmes) et Collectors.counting() calcule la fréquence de chaque occurrence.

Pour les entiers, le code peut être légèrement modifié :

<code class="java">Map<String, Integer> collect = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
Copier après la connexion

Tri par valeur :

De plus, la carte résultante peut être triée par ordre décroissant de fréquence des mots :

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

Cet extrait de code supplémentaire ajoute un ensemble d'entrées au flux, le trie par ordre décroissant en fonction des valeurs et collecte les entrées dans un LinkedHashMap pour conserver l'ordre de tri.

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