【发布时间】:2016-01-30 09:06:13
【问题描述】:
我有像下面这样的函数,它应该计算共享某个指定名称的所有文件的平均 lastModified(它们位于不同的目录中)。
private static long getAverageTimestamp(List<File> files, String filter) {
return files.stream()
.filter(f -> f.getName().equals(filter))
.collect(Collectors.averagingLong(File::lastModified));
}
问题是Collectors.averagingLong 抱怨它不能将Double 转换为long。
自从File::lastModified 返回long 后,这个double 是从哪里来的?
来自lastModified的javadoc:
返回:一个 long 值,表示文件最后一次修改的时间,以自纪元(格林威治标准时间 00:00:00,1970 年 1 月 1 日)以来的毫秒数为单位...
【问题讨论】:
-
long 数的平均值不一定是 long (以 1 和 2 为例)...averagingLong returns a double
-
那么同时拥有averagingLong 和averagingDouble 有什么意义呢?我希望 long 变量会丢弃小数点 O_O
-
一个平均多头,另一个平均加倍(作为数据源),但都返回双倍。如果您不需要小数部分,您可以将该 double 转换为 long...
-
感谢您的澄清。我仍然认为这个名称具有误导性。
标签: java