Java 8 中的词频计数:一种简化的方法
在 Java 8 中,可以优雅地实现列表中单词的频率计数使用流。
考虑以下示例列表:List
<code class="java">Map<String, Long> wordFrequencies = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
此代码首先按字符串标识对列表元素进行分组,有效地创建一个映射,其中键是唯一的单词,值是他们的计数。 Collectors.counting 收集器会自动增加每个单词的计数。
生成的映射 wordFrequencies 在打印时将类似于 {ciao=2, hello=1, bye=2}。
或者,对于整数值计数:
<code class="java">Map<String, Integer> wordFrequencies = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
此变体使用 Collectors.summingInt 来累积整数计数。
要按值对结果映射进行排序,我们可以链接其他流和收集器:
<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>
这种排序可确保最常出现的单词首先出现在地图中。
以上是如何使用流有效地计算 Java 8 中的词频?的详细内容。更多信息请关注PHP中文网其他相关文章!