使用 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();
我正在尝试计算文本文件中唯一单词的数量。为了简单起见,我当前的文件内容是:
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();