首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -大文件中的重复字数统计

Java -大文件中的重复字数统计
EN

Stack Overflow用户
提问于 2017-02-18 09:07:54
回答 3查看 1.2K关注 0票数 2

我想从大文件内容中找出重复的字数。使用java 8 stream API有什么最好的方法吗?

更新详细信息

文件格式为逗号分隔值,文件大小约为4 GB

EN

回答 3

Stack Overflow用户

发布于 2017-02-18 10:11:02

我不知道是否有最好的方法,这也取决于你没有告诉我们的细节。现在,我假设有一个文本文件,其中每一行都有由空格分隔的多个单词。一种可能的方法是:

代码语言:javascript
复制
    Map<String, Long> result = Files.lines(filePath)
            .flatMap(line -> Stream.of(line.split(" ")))
            .collect(Collectors.groupingBy(word -> word, Collectors.counting()));

我认为每一行的单词拆分需要改进;例如,您可能想要丢弃标点符号。以此为起点,并将其发展为您在特定情况下所需的内容。

编辑:感谢@4castle的启发,拆分成单词的方式可以是这样的:你更喜欢方法引用而不是lambda:

代码语言:javascript
复制
    Map<String, Long> result = Files.lines(filePath)
            .flatMap(Pattern.compile(" ")::splitAsStream)
            .collect(Collectors.groupingBy(word -> word, Collectors.counting()));

它会产生相同的结果。Edit2:这里删除了关于优化的废话。

也许我们不应该在这里走得太远,直到我们知道在每一行中分隔单词的更准确的要求。

票数 5
EN

Stack Overflow用户

发布于 2017-02-18 10:08:43

如果你已经有了所有单词的列表,比如List<String> words,那么你可以使用这样的东西:

代码语言:javascript
复制
 Map<String, Integer> counts = words.parallelStream().
            collect(Collectors.toConcurrentMap(
                w -> w, w -> 1, Integer::sum));
票数 1
EN

Stack Overflow用户

发布于 2020-11-08 04:36:03

您可以以不同的方式执行相同的操作,只需计算文件中的字数(所有的字,包括重复的字)。然后简单地使用流将所有单词添加到集合(不允许重复值)集合。然后执行总字数计数-设置的的大小。所以你可以很容易地得到所有重复的字数。

代码语言:javascript
复制
Long totalWordCount = Files.lines(filePath)
                  .flatMap(line -> Stream.of(line.split(" "))).count();

Set<String> uniqueWords = Files.lines(filePath)
                      .flatMap(line -> Stream.of(line.split(" ")))
                      .collect(Collectors.toSet());

Long repetitiveWordCount = totalWordCount - (long) uniqueWords.size();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42309937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档