”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用 Java 8 有效地统计列表中的词频?

如何使用 Java 8 有效地统计列表中的词频?

发布于2024-11-08
浏览:423

How can I efficiently count word frequency in a list using Java 8?

使用 Java 8 计算词频

在 Web 开发和数据分析中,理解词频至关重要。为了实现这一目标,我们将深入研究如何使用 Java 8 计算列表中单词的频率。

Java 8 解决方案

Java 8 中的 Stream API 为单词提供了一个优雅的解决方案频率计数。首先,创建一个单词列表:

List wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");

核心逻辑涉及根据单词的身份对单词进行分组并统计出现次数:

Map collect = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

这会生成一个映射,其中每个键都是唯一的单词,相应的值是其频率。输出应类似于:

{ciao=2, hello=1, bye=2}

计数整数值

如果您需要整数值而不是长值,请使用:

Map collect = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));

按值对地图进行排序

根据中的值对地图进行排序降序排列,使用:

LinkedHashMap 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
            ));

这一步返回一个排序的 LinkedHashMap,其中键代表单词,值代表它们的排序频率。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3