如何在Stream流中分组统计

上面是今天碰到需求,之前就做过类似的分组统计,这个相对来说比较简单,统计的也少,序号总预约人数 这两部分交给前端了,不需要由后端统计,后端统计一下预约日期检查项目预约人数就行;

java 复制代码
  @Override
    public List<ItemStatisticsVo> statistics(ItemStatisticsModel itemStatisticsModel) {
        //调用xml接口
        List<ItemStatisticsVo> list = new ArrayList<>();
        //这里的方法是mapper.xml映射的sql,根据传入的参数进行查询,这边调用一下
        List<ItemVO> itemVOS = this.getBaseMapper().selectScrReserve(itemStatisticsModel);
        if (itemVOS.isEmpty()) {
            throw new ServiceException("查询为空");
        }
        itemVOS.forEach(t -> t.setCreateTime(DateUtil.parseDate(DateUtil.format(t.getCreateTime(), "yyyy-MM-dd"))));
        //先以创建时间分组,每个时间对应一个list
        Map<Date, List<ItemVO>> collect = itemVOS.stream().collect(Collectors.groupingBy(ItemVO::getCreateTime));

        //k->时间 v->每个时间对应的list
        collect.forEach((k, v) -> {
            //每个list中包含检查项目名称,以项目名称分组
            Map<String, List<ItemVO>> collect1 = v.stream().collect(Collectors.groupingBy(ItemVO::getItemName));
            ItemStatisticsVo vo = new ItemStatisticsVo();
            //到这儿直接set日期
            vo.setReservationDate(k);
            List<ItemStatisticsInfoVo> list1 = new ArrayList<>();
            //x->项目名称 y->list<ItemVo>
            collect1.forEach((x, y) -> {
                ItemStatisticsInfoVo infoVo = new ItemStatisticsInfoVo();
                //检查项目名称
                infoVo.setInspectionName(x);
                //统计list的大小,就是每个项目名称预约的人数
                infoVo.setScNum(y.size());
                list1.add(infoVo);
            });
            vo.setList(list1);
            list.add(vo);
        });
        return list;
    }
相关推荐
Otaku love travel15 分钟前
老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
java·tomcat·初始化·动态数据源
DKPT28 分钟前
Java设计模式之行为型模式(责任链模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
L_autinue_Star44 分钟前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
晨岳1 小时前
CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
java·redis·mysql·nginx·centos·tomcat
执笔诉情殇〆1 小时前
前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
java·服务器·redis·nginx·minio
YuTaoShao1 小时前
【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵
java·算法·leetcode·链表
程序员的世界你不懂2 小时前
(20)Java+Playwright自动化测试- 操作鼠标拖拽 - 上篇
java·python·计算机外设
AI360labs_atyun2 小时前
Java在AI时代的演进与应用:一个务实的视角
java·开发语言·人工智能·科技·学习·ai
不像程序员的程序媛3 小时前
redis的一些疑问
java·redis·mybatis
知其然亦知其所以然3 小时前
Java 面试高频题:GC 到底回收了什么、怎么回收、啥时候回收?
java·后端·面试