java stream 按月(日期Date)分组统计

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(3522)   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

相关阅读

java stream 按月(日期Date)分组统计首先是上一个简单的数据模型@Data @NoArgsConstructor @AllArgsConstructor public class ...
Spring boot 参数分组校验项目源码下载:demo-boot-group-validation.zip​​​​​​​ 访问密码:9987分组校验演示项目结构演示项目创建maven主要依赖...
本文主要讲解通过使用 Stream.concat() 方法 去合并两个stream,新的stream由原来的两个stream所有元素组成(相同元素会覆盖)
Java stream 筛选集合中的唯一对象出来演示数据模型@AllArgsConstructor @NoArgsConstructor @Data public class UserInfo ...
简介本博文主要讲解在Java 8中 如何通过stream流的方式去重
java 8 stream 多字段排序,本例子主要使用stream进行多个字段的排序,使用了 comparators和Comparator.thenComparing()方法。比较器之间返回一个...
取出属性为集合List&lt;String&gtl; stateNameList = dictEntityList.stream().map(DictEntity::getName).colle...
MySQL分类统计后纵表转横表
//声明一个List集合List&lt;Person&gtl; list = new ArrayList();           list.add(new Person("1001", "小A...
idea配置类注释模板和方法注释模板打开idea的setting菜单,File-&gtl;Settings..打开设置 找到Live Templates模板组创建 新建一个分组test新建模板分...