尚医通--92节 代码解析

一、前端数据类型
尚医通--92节 代码解析_第1张图片尚医通--92节 代码解析_第2张图片二、后端代码解析

//根据医院编号 查询所有科室列表
    @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> deparmentMap  = departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));

解释:遍历departmentList集合,安getBigcode(大科室编号)分组
尚医通--92节 代码解析_第3张图片
难点二
for (Map.Entry entry:deparmentMap.entrySet()

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

map集合的四种遍历方式

你可能感兴趣的:(spring,boot,学习,java,map)