java stream 按月(日期Date)分组统计
教程分享
>
Java教程
(4716)
2024-04-17 12:33:20
java stream 按月(日期Date)分组统计
首先是上一个简单的数据模型
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Staff {
//姓名
String name;
//生产日期
Date date;
//产量
BigDecimal yield;
}
员工模型分别有 字符类型的名称,Date类型生产日期,BigDecimal类型的产量
需求,根据提供的数据List集合按月统计数据,求每月生产总量
public static void main(String[] args) {
List<Staff> staffList=new ArrayList<>();
staffList.add(new Staff("张三", DateUtil.parse("2022-01-01","yyyy-MM-dd"),new BigDecimal(10)));
staffList.add(new Staff("张三", DateUtil.parse("2022-01-02","yyyy-MM-dd"),new BigDecimal(14)));
staffList.add(new Staff("张三", DateUtil.parse("2022-01-03","yyyy-MM-dd"),new BigDecimal(11)));
staffList.add(new Staff("张三", DateUtil.parse("2022-02-03","yyyy-MM-dd"),new BigDecimal(10)));
staffList.add(new Staff("张三", DateUtil.parse("2022-02-04","yyyy-MM-dd"),new BigDecimal(10)));
//求每月对于生产总量
Map<String, BigDecimal> yieldMonthMap = staffList.stream().collect(
Collectors.groupingBy(
o -> DateUtil.format(o.getDate(), "yyyy-MM"),
Collectors.mapping(Staff::getYield, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
));
System.out.println(yieldMonthMap);
}
上方代码首先是构建模拟数据,然后进按月行分组统计,最终输出结果:
按月分组统计结果
https://www.leftso.com/article/1053.html