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中文网其他相关文章!