首页 > Java > java教程 > 如何使用流有效地计算 Java 8 中的词频?

如何使用流有效地计算 Java 8 中的词频?

DDD
发布: 2024-11-03 12:33:02
原创
610 人浏览过

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

Java 8 中的词频计数:一种简化的方法

在 Java 8 中,可以优雅地实现列表中单词的频率计数使用流。

考虑以下示例列表:List; WordsList = Lists.newArrayList("你好", "再见", "再见", "再见", "再见");.为了计算单词频率,我们利用 Collectors.groupingBy 和 Collectors.counting 收集器。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板