尚医通--92节 代码解析

一、前端数据类型
在这里插入图片描述在这里插入图片描述二、后端代码解析

//根据医院编号 查询所有科室列表
    @Override
    public List<DepartmentVo> findDeptTree(String hoscode) {
        //1、根据前端数据列表  创建list 集合封装最终的数据
        ArrayList<DepartmentVo> result = new ArrayList<>();

        //2、根据医院编号查询mongodb数据库中的部门表
            //2.1封装查询条件
            Department departmentQuery = new Department();
            departmentQuery.setHoscode(hoscode);
            Example<Department> example = Example.of(departmentQuery);
            //2.2调用方法查询
            List<Department> departmentList = departmentRepository.findAll(example);

        //3、遍历集合  根据大科室编号bigcode分组,再按照大科室编号查询下级科室
            //3.1根据jdk 1.8 遍历数组
            Map<String,List<Department>> deparmentMap  = departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));
            //3.2遍历map集合 Map.Entry 可同时获取key 和 value
            for (Map.Entry<String,List<Department>> entry:deparmentMap.entrySet()){
                //3.2.1封装大科室数据
                    //获取大科室编号
                String bigcode = entry.getKey();
                    //获取大科室编号对应的数据
                List<Department> deparment1List = entry.getValue();
                    //根据前端数据展示样式封装大科室数据
                DepartmentVo departmentVo1 = new DepartmentVo();
                departmentVo1.setDepcode(bigcode);
                departmentVo1.setDepname(deparment1List.get(0).getDepname());

                //3.2.2封装小科室数据
                List<DepartmentVo> children = new ArrayList<>();
                for(Department department: deparment1List) {
                    DepartmentVo departmentVo2 =  new DepartmentVo();
                    departmentVo2.setDepcode(department.getDepcode());
                    departmentVo2.setDepname(department.getDepname());
                    //封装到list集合
                    children.add(departmentVo2);
                }
                //把小科室list集合放到大科室children里面
                departmentVo1.setChildren(children);
                //放到最终result里面
                result.add(departmentVo1);
            }

       return result;
    }
**难点:一**
遍历集合  根据大科室编号bigcode分组,再按照大科室编号查询下级科室
 Map<String,List<Department>> deparmentMap  = departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));

解释:遍历departmentList集合,安getBigcode(大科室编号)分组
在这里插入图片描述
难点二
for (Map.Entry<String,List> entry:deparmentMap.entrySet()

解释:
Map.Entry的作用
Map.Entry是为了更方便的输出map键值对。一般情况下,要输出Map中的key 和 value 是先得到key的集合keySet(),然后再迭代(循环)由每个key得到每个value。values()方法是获取集合中的所有值,不包含键,没有对应关系。而Entry可以一次性获得这两个值。

map集合的四种遍历方式

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐睡睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值