使用java Streams计算文件中的所有单词

7 java cpu-word distinct-values java-8 java-stream

我试图计算文本文件中唯一单词的数量.为简单起见,我当前的文件内容是:

这是一个示例文件

我的尝试是:

long wordCount = 
    Files.lines(Paths.get("sample.txt"))
         .map(line -> line.split("\\s+"))
         .distinct()
         .count();
System.out.println(wordCount);
Run Code Online (Sandbox Code Playgroud)

编译并运行正常,但结果1应该是5.

Era*_*ran 12

您将每一行映射到一个数组(将a转换Stream<String>为a Stream<String[]>,然后计算数组元素的数量(即文件中的行数).

您应该使用flatMap创建Stream<String>文件中的所有单词,并在distinct()count()操作之后,您将获得不同单词的数量.

long wordCount = 
    Files.lines(Paths.get("sample.txt"))
         .flatMap(line -> Arrays.stream(line.split("\\s+")))
         .distinct()
         .count();
Run Code Online (Sandbox Code Playgroud)


Nam*_*man 7

您似乎在计算文件中的行:

map(line -> line.split("\\s+")) // this is a Stream<String[]>
Run Code Online (Sandbox Code Playgroud)

您还应进一步使用Stream.flatMap:

long wordCount = Files.lines(Paths.get("sample.txt"))
        .map(line -> line.split("\\s+"))
        .flatMap(Arrays::stream)
        .distinct()
        .count();
Run Code Online (Sandbox Code Playgroud)