Java - 大文件中重复的字数

One*_*Two 2 java java-8 java-stream

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

更新细节

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

Ole*_*.V. 5

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

    Map<String, Long> result = Files.lines(filePath)
            .flatMap(line -> Stream.of(line.split(" ")))
            .collect(Collectors.groupingBy(word -> word, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)

我认为需要改进每一行分为单词; 例如,你可能想要丢弃标点符号.以此为出发点,将其发展为您在特定情况下的需求.

编辑:感谢@ 4castle的灵感,可以通过这种方式分割成单词,而不是基于lambda的方法引用:

    Map<String, Long> result = Files.lines(filePath)
            .flatMap(Pattern.compile(" ")::splitAsStream)
            .collect(Collectors.groupingBy(word -> word, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)

它产生相同的.Edit2:这里删除了关于优化的废话.

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

  • 对于初学者来说,拆分可以是`.flatMap(Pattern.compile(""):: splitAsStream)` (2认同)