我试图计算文本文件中唯一词的数量。为了简单起见,我当前的文件内容为:
这是一个示例文件
我的尝试是:
long wordCount =
Files.lines(Paths.get("sample.txt"))
.map(line -> line.split("\\s+"))
.distinct()
.count();
System.out.println(wordCount);
这可以编译并正常运行,但结果为1
,而应为5
。
答案 0 :(得分:12)
您正在将每一行映射到一个数组(将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();
答案 1 :(得分:7)
您似乎正在计算文件中的行数:
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();