关于递归获取无限级部门树
部门实体
class Dept{
private Integer id;
private Integer parentId;
private String deptName;
//省略构造函数,getter,setter
}
节点类
class DeptNode{
private Dept node;
private List<DeptNode> childNodeList;
//省略构造函数,getter,setter
}
构造类
class DeptTreeBuilder {
//顶级部门唯一
public static DeptNode buildTree(Dept rootDept, List<Dept> deptList) {
//根节点
DeptNode rootDeptNode = new DeptNode();
//节点部门
rootDeptNode.setNode(rootDept);
//下级节点
rootDeptNode.setChildNodeList(buildDeptTreeNode(rootDept, deptList));
//返回根节点
return rootDeptNode;
}
//获取父节点的子节点
private static List<DeptNode> buildDeptTreeNode(Dept pNode, List<Dept> nodeList) {
//初始化子节点
List<DeptNode> childNodeList = new ArrayList<>();
for (Dept node : nodeList) {
//判断获取子节点
if (pNode.getId().equals(node.getParentId())) {
DeptNode tempNode = new DeptNode();
//节点部门
tempNode.setNode(node);
//下级节点
tempNode.setChildNodeList(buildDeptTreeNode(node, nodeList));
childNodeList.add(tempNode);
}
}
//返回子节点列表
return childNodeList;
}
}
调试一下
public static void main(String[] args) {
List<Dept> depts = new ArrayList<>();
Dept rootDept = new Dept(1, 0, "一级");
depts.add(new Dept(2, 1, "二级"));
depts.add(new Dept(3, 2, "三级"));
depts.add(new Dept(4, 3, "四级"));
DeptNode deptTree = DeptTreeBuilder.buildTree(rootDept, depts);
String s = JSON.toJSONString(deptTree);
System.out.println(s);
}
{"childNodeList":[{"childNodeList":[{"childNodeList":[{"childNodeList":[],"node":{"deptName":"四级","id":4,"parentId":3}}],"node":{"deptName":"三级","id":3,"parentId":2}}],"node":{"deptName":"二级","id":2,"parentId":1}}],"node":{"deptName":"一级","id":1,"parentId":0}}

浙公网安备 33010602011771号