繁体   English   中英

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

[英]Count all the words in a file using java Streams

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

这是一个示例文件

我的尝试是:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM