Java-大文件中的重复字数

Java-大文件中的重复字数,java,java-8,java-stream,Java,Java 8,Java Stream,我想从大文件内容中找到重复的字数。有没有使用Java8流API的最佳方法 最新详情 文件格式为逗号分隔值,文件大小约为4 GB如果您已经有一个所有单词的列表,请说列出单词,然后您可以使用类似以下内容: Map<String, Integer> counts = words.parallelStream(). collect(Collectors.toConcurrentMap( w -> w, w -> 1, In

我想从大文件内容中找到重复的字数。有没有使用Java8流API的最佳方法

最新详情


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

如果您已经有一个所有单词的列表,请说
列出单词
,然后您可以使用类似以下内容:

 Map<String, Integer> counts = words.parallelStream().
            collect(Collectors.toConcurrentMap(
                w -> w, w -> 1, Integer::sum));
Map counts=words.parallelStream()。
collect(Collectors.toConcurrentMap(
w->w,w->1,整数::和);

我不知道是否有最好的方法,这也取决于您没有告诉我们的细节。现在,我假设一个文本文件,每行有许多单词,它们之间用空格隔开。一种可能的办法是:

    Map<String, Long> result = Files.lines(filePath)
            .flatMap(line -> Stream.of(line.split(" ")))
            .collect(Collectors.groupingBy(word -> word, Collectors.counting()));
Map result=Files.line(文件路径)
.flatMap(行->流(行分割(“”))
.collect(Collectors.groupingBy(word->word,Collectors.counting());
我认为每行文字的拆分需要改进;例如,您可能希望放弃标点符号。以此为出发点,将其发展为您在特定情况下所需要的

编辑:多亏@4castle的灵感,可以通过以下方式将文字拆分为文字:您更喜欢方法参考而不是lambda:

    Map<String, Long> result = Files.lines(filePath)
            .flatMap(Pattern.compile(" ")::splitAsStream)
            .collect(Collectors.groupingBy(word -> word, Collectors.counting()));
Map result=Files.line(文件路径)
.flatMap(Pattern.compile(“”::splitAsStream)
.collect(Collectors.groupingBy(word->word,Collectors.counting());
它产生同样的结果。编辑2:这里删除了关于优化的废话


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

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

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();
Long totalWordCount=Files.line(文件路径)
.flatMap(line->Stream.of(line.split(“”)).count();
设置uniqueWords=Files.lines(文件路径)
.flatMap(行->流(行分割(“”))
.collect(收集器.toSet());
Long RepeativeWordCount=totalWordCount-(Long)uniqueWords.size();

您的文件格式是什么?和重复的字数计数,它仅仅是为输入中的每个字,一个出现的计数?或者…?对于初学者来说,拆分可以是
.flatMap(Pattern.compile(“”::splitAsStream)