Java 8 中的單字頻率計數
如何使用 Java 8 計算清單中單字的頻率?
<code class="java">List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");</code>
結果應為:
<code class="java">{ciao=2, hello=1, bye=2}</code>
最開始,我預期會用到映射和化簡方法,但實際方法略有不同。
<code class="java">Map<String, Long> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
或對於整數值:
<code class="java">Map<String, Integer> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
編輯
我還添加瞭如何按值對映射進行排序:
<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>
以上是如何使用 Java 8 計算列表中的詞頻?的詳細內容。更多資訊請關注PHP中文網其他相關文章!