如何在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;
    }
相关推荐
wuminyu2 分钟前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
小蒜学长12 分钟前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
掉进电商坑三年没爬出来的东叔23 分钟前
青龙面板进阶:一个面板聚合多平台签到,所有积分自动领
java·开发语言
殷色玫瑰1 小时前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio
IT方大同1 小时前
java输入输出+方法
java·开发语言·python
Yyyyyy~1 小时前
【Java】String
java
Wang's Blog2 小时前
Java框架 SpringCloud 快速入门: 服务拆分之服务远程调用
java·开发语言·spring cloud
Wang's Blog2 小时前
Java框架 SpringCloud 快速入门: 路由断言工厂
java·spring·spring cloud
ym hyd 1112 小时前
门诊挂号系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·毕设
杨丰玮4182 小时前
C语言核心语法
java·c语言·开发语言·学习方法