直接上代码,比如封装组织
树形结构:
@Service
public class TestService{
public List<DepTreeDto> treeDept() {
//查询列表
List<DepTreeDto> deptList = deptMapper.listTreeDept();
return buildDeptTree(deptList);
}
/**
* 构建前端所需要树结构
*
* @param deptList 部门列表
* @return 树结构列表
*/
private List<DepTreeDto> buildDeptTree(List<DepTreeDto> deptList) {
//新集合
List<DepTreeDto> returnList = new ArrayList<>();
List<Integer> tempList = new ArrayList<>();
for (DepTreeDto dept : deptList) {
tempList.add(dept.getId());
}
for (DepTreeDto dept : deptList) {
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId())) {
recursionFn(deptList, dept);
returnList.add(dept);
}
}
//没有查询到节点则以当前节点
if (returnList.isEmpty()) {
returnList = deptList;
}
return returnList;
}
/**
* 递归列表
*/
private void recursionFn(List<DepTreeDto> list, DepTreeDto t) {
// 得到子节点列表
List<DepTreeDto> childList = getChildList(list, t);
t.setChildren(childList);
for (DepTreeDto tChild : childList) {
// 判断是否有子节点
if (StringUtils.isNotNull(tChild.getParentId()) && tChild.getParentId().equals(t.getId())) {
for (DepTreeDto n : childList) {
recursionFn(list, n);
}
}
}
}
/**
* 得到子节点列表
*/
private List<DepTreeDto> getChildList(List<DepTreeDto> list, DepTreeDto t) {
List<DepTreeDto> tList = new ArrayList<>();
for (DepTreeDto n : list) {
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().equals(t.getId())) {
tList.add(n);
}
}
return tList;
}
}