部门列表转换为树结构问题
来源:7-2 部门层级树接口开发

Screenly
2019-05-13
老师好!
public List<DeptLevelDto> deptListToTree(List<DeptLevelDto> deptLevelList){
if(CollectionUtils.isEmpty(deptLevelList)){
return Lists.newArrayList();
}
Multimap<String, DeptLevelDto> levelDeptMap = ArrayListMultimap.create();
List<DeptLevelDto> rootList = Lists.newArrayList();
for (DeptLevelDto dto : deptLevelList){
levelDeptMap.put(dto.getLevel(), dto);
// 获取根节点的数据
if(LevelUtil.ROOT.equals(dto.getLevel())){
rootList.add(dto);
}
}
// 按照seq从小到大排序
Collections.sort(rootList, new Comparator<DeptLevelDto>() {
@Override
public int compare(DeptLevelDto o1, DeptLevelDto o2) {
return o1.getSeq() - o2.getSeq();
}
});
// 递归生成树
transformDeptTree(rootList, LevelUtil.ROOT, levelDeptMap);
return rootList;
}
最后递归生成树之后,rootList 中的数据为何就带有子部门的信息了?transformDeptTree 方法是 void的类型的,这里有点迷糊,请老师指点
写回答
1回答
-
你好,不晓得你是否了解java里的参数引用传递,我们这里返回void还能完成子节点数据的递归组装,核心用的就是引用传递,具体来说就是不停的处理当前节点的子节点,每一次操作都是在已有节点上进行更新,由于传递的参数都是引用传递,因此每递归一层都是更新上一层数据的属性(子节点),从更高的视角来看,就是定义好根节点后,之后所有的递归都是在更新这个子节点的属性而已,因此根本不需要返回值也可以完成树的构建,
012019-05-13
相似问题