Java 如何按天分组计算求和
在Java中,要按天分组计算求和,我们可以使用java.util.stream.Stream
类的collect
方法结合java.util.stream.Collectors
类的groupingBy
方法来实现。
下面是按天分组计算求和的步骤:
1. 准备数据
首先,我们需要有一组数据,每个数据包含日期和值。假设我们有一个名为Data
的类,包含date
和value
两个属性:
public class Data {
private LocalDate date;
private double value;
public Data(LocalDate date, double value) {
this.date = date;
this.value = value;
}
public LocalDate getDate() {
return date;
}
public double getValue() {
return value;
}
}
2. 创建数据列表
接下来,我们创建一个包含多个Data
对象的列表作为示例数据:
List<Data> dataList = new ArrayList<>();
dataList.add(new Data(LocalDate.of(2021, 1, 1), 10.0));
dataList.add(new Data(LocalDate.of(2021, 1, 2), 15.0));
dataList.add(new Data(LocalDate.of(2021, 1, 2), 20.0));
dataList.add(new Data(LocalDate.of(2021, 1, 3), 12.0));
dataList.add(new Data(LocalDate.of(2021, 1, 3), 18.0));
dataList.add(new Data(LocalDate.of(2021, 1, 3), 25.0));
3. 按天分组计算求和
使用java.util.stream.Stream
类的collect
方法结合java.util.stream.Collectors
类的groupingBy
方法,我们可以按天分组计算求和。
Map<LocalDate, Double> sumByDay = dataList.stream()
.collect(Collectors.groupingBy(Data::getDate, Collectors.summingDouble(Data::getValue)));
上述代码将数据列表按照日期进行分组,并计算每个日期对应的值的和。最终,sumByDay
将保存每天的日期和对应的求和值。
4. 输出结果
我们可以通过遍历sumByDay
来输出结果:
for (Map.Entry<LocalDate, Double> entry : sumByDay.entrySet()) {
System.out.println("Date: " + entry.getKey() + ", Sum: " + entry.getValue());
}
输出结果如下:
Date: 2021-01-01, Sum: 10.0
Date: 2021-01-02, Sum: 35.0
Date: 2021-01-03, Sum: 55.0
流程图
flowchart TD
A[准备数据] --> B[创建数据列表]
B --> C[按天分组计算求和]
C --> D[输出结果]
饼状图
pie
"2021-01-01": 10.0
"2021-01-02": 35.0
"2021-01-03": 55.0
通过上述步骤,我们可以在Java中按天分组计算求和。这种方法不仅适用于日期的分组计算,还适用于其他类型的分组计算。