Heim > Java > javaLernprogramm > Hauptteil

Wie kann die Stream-API von Java 8 verwendet werden, um Worthäufigkeiten in einer Liste effizient zu zählen?

Susan Sarandon
Freigeben: 2024-11-03 14:51:02
Original
957 Leute haben es durchsucht

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

Java 8-Implementierung für die Worthäufigkeitszählung

Die Ermittlung der Häufigkeit von Wörtern innerhalb einer bestimmten Liste ist eine wesentliche Aufgabe bei der Verarbeitung natürlicher Sprache. Java 8 bietet einen vielseitigen Ansatz zum effizienten Zählen des Vorkommens von Wörtern mithilfe seiner robusten Stream-API und integrierten Kollektoren.

Problem:

Betrachten Sie die folgende Liste von Wörtern :

<code class="java">List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");</code>
Nach dem Login kopieren

Das Ziel besteht darin, die Häufigkeitszahl jedes Wortes zu bestimmen, was zu einer Ausgabe wie:

<code class="java">{ciao=2, hello=1, bye=2}</code>
Nach dem Login kopieren

Java 8-Lösung:

führt

Im Gegensatz zu herkömmlichen Methoden verwendet Java 8 einen anderen Ansatz:

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

In dieser Codezeile wird die Methode stream() verwendet, um einen Stream von Elementen aus der Wortliste zu initiieren. Anschließend sammelt Collectors.groupingBy() Elemente basierend auf ihrer Identität (den Wörtern selbst) und Collectors.counting() berechnet die Häufigkeit jedes Vorkommens.

Für ganze Zahlen kann der Code leicht geändert werden:

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

Sortierung nach Wert:

Außerdem kann die resultierende Karte in absteigender Reihenfolge der Worthäufigkeit sortiert werden:

<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>
Nach dem Login kopieren

Dieses zusätzliche Code-Snippet Hängt einen Eintragssatz an den Stream an, sortiert ihn in absteigender Reihenfolge basierend auf den Werten und sammelt die Einträge in einer LinkedHashMap, um die sortierte Reihenfolge beizubehalten.

Das obige ist der detaillierte Inhalt vonWie kann die Stream-API von Java 8 verwendet werden, um Worthäufigkeiten in einer Liste effizient zu zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage