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

Count all the words in a file using java Streams

我正在尝试计算文本文件中唯一单词的数量。为了简单起见,我当前的文件内容是:

This is a sample file

我的尝试是:

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

这编译和运行正常,但结果是 1,而它应该是 5

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

你应该使用flatMap创建文件中所有单词的Stream<String>,在distinct()count()操作之后,你会得到不同单词的数量。

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

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

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

您还应将 Stream.flatMap 用作:

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