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
<code class="java">Map<String, Long> wordFrequencies = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
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>
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>
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!