关于递归获取无限级部门树

部门实体

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}}
posted @ 2021-12-24 10:57  庸人_自扰  阅读(135)  评论(0)    收藏  举报