一、前端数据类型二、后端代码解析
//根据医院编号 查询所有科室列表
@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可以一次性获得这两个值。
版权声明:本文为qq_44798321原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。