1、日常编码过程中经常会遇到将对象集合组装成树状结构,对象包含id和parentId,比如部门树机构。通过方法的递归调用可以实现,但是递归容易出现内存溢出,而且效率不高。那么有没有安全并高效的方法实现呢,本文就介绍一种。
2、废话不多说,以组装部门树方法为例直接上代码:
// 拼装部门树形结构结果
public List<Dept> deptTree11(List<Dept> deptList) {
List<Dept> result = new ArrayList<>();
Map<Long, Dept> deptMap = new LinkedHashMap<>();
for (Dept dept : deptList) {
deptMap.put(dept.getId(), dept);
}
for (Long deptId : deptMap.keySet()) {
Dept dept = deptMap.get(deptId);
Long parentId = dept.getParentId();
if (parentId == null || parentId == 0) {
result.add(dept);
} else {
Dept parentDept = deptMap.get(parentId);
if(parentDept!=null){
if (CollectionUtils.isEmpty(parentDept.getChildDepts())) {
parentDept.setChildDepts(new ArrayList<>());
}
parentDept.getChildDepts().add(dept);
}
}
}
return result;
}