【发布时间】:2015-09-11 23:33:16
【问题描述】:
我有一个单词列表文本文件,我想从该文件中获取最小、最大和平均单词长度。
我有一个流方法:
public static Stream<String> readWords(String filename) {
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
Stream<String> stringStream = reader.lines();
return stringStream;
} catch (IOException exn) {
return Stream.<String>empty();
}
}
在我的主要测试方法中,我打印的是最大值和最小值
System.out.println(readWords(filename)
.min(Comparator.comparing(s -> s.length()))
.get()
.length()
);
System.out.println(readWords(filename)
.max(Comparator.comparing(s -> s.length()))
.get()
.length()
);
它按预期工作。
问题:
是否有可能像我在 min 和 max 中所做的那样获得单词长度的平均值?无论是或否,如何做到这一点(仅作为 Lambda 表达式)?
【问题讨论】:
-
您可以使用 .reduce(0, (i, c) -> c+i.length()) 并将其除以行数。
-
提示:如果您的文件很大并且有很多行,请使用 collect 而不是 reduce
-
@JoshuaK 感谢您的贡献,我在下面找到了答案
标签: java lambda java-8 java-stream