Heim > Java > javaLernprogramm > Wie kann ich Worthäufigkeiten in Java 8 mithilfe von Streams effizient zählen?

Wie kann ich Worthäufigkeiten in Java 8 mithilfe von Streams effizient zählen?

DDD
Freigeben: 2024-11-03 12:33:02
Original
610 Leute haben es durchsucht

How can I efficiently count word frequencies in Java 8 using streams?

Worthäufigkeitszählung in Java 8: Ein optimierter Ansatz

In Java 8 kann das Zählen der Häufigkeit von Wörtern in einer Liste elegant erreicht werden Verwenden von Streams.

Betrachten Sie die folgende Beispielliste: List WordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");. Um Worthäufigkeiten zu zählen, verwenden wir die Collectors.groupingBy und Collectors.counting Collectors.

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

Dieser Code gruppiert zunächst die Listenelemente nach ihrer String-Identität und erstellt so effektiv eine Karte, in der Schlüssel eindeutige Wörter und Werte sind ihre Zählungen. Der Collectors.counting-Kollektor erhöht automatisch die Anzahl für jedes Wort.

Die resultierende Karte, wordFrequences, ähnelt beim Drucken {ciao=2, hello=1, bye=2}.

Alternativ , für ganzzahlige Zählungen:

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

Diese Variante verwendet Collectors.summingInt, um ganzzahlige Zählungen zu akkumulieren.

Um die resultierende Karte nach Wert zu sortieren, können wir zusätzliche Streams und Kollektoren verketten:

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

Diese Sortierung stellt sicher, dass die am häufigsten vorkommenden Wörter zuerst in der Karte erscheinen.

Das obige ist der detaillierte Inhalt vonWie kann ich Worthäufigkeiten in Java 8 mithilfe von Streams effizient 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage