我有一个 PricingSamples 对象的数组:
public class PricingSample {
private Date time;
private Double average;
public PricingSample(Date time, Double average) {
this.time = time;
this.average = average;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public Double getAverage() {
return average;
}
public void setAverage(Double average) {
this.average = average;
}
}
这些样本是过去一个月的每小时测量值。我想计算每天的总体平均值。我可以在数据流中计算出现次数,也可以计算每天所有平均值的总和,但我不知道如何将这两个内容合并到一个数据流中。
以下是我的进展:
将每天所有平均值相加(我按日期属性的子字符串进行分组以按天分组,例如Thu Apr 26):
Map<String, Double> counts = Arrays.stream(samples).collect(Collectors.groupingBy((PricingSample e) -> {
return e.getTime().toString().substring(0, 10);
},
Collectors.summingDouble((PricingSample e) -> {
return e.getAverage();
})));
获取每天的样本数: Map counts =
Arrays.stream(samples).collect(Collectors.groupingBy((PricingSample e) -> {
return e.getTime().toString().substring(0, 10);
},
Collectors.counting()
));
TreeMap::new
作为传递给groupingBy
的第二个参数添加即可。这将导致输出的Map
成为一个TreeMap
,其中键已排序。 - Eran