TreeUtil---生成树状结构数据

/**
 * @description:
 * @author: qiuqingxin
 * @create: 2020-08-04 13:49
 **/
public class TreeNodeUtil {
    public static List<BsOrganizationVo> tree;



    /**
     * 获取根节点
     * @return
     */
    private static List<BsOrganizationVo> getRootNode(){
        List<Long> orgIds = tree.stream().map(BsOrganizationVo::getOrgId).collect(Collectors.toList());
        List<BsOrganizationVo> rootNode=new ArrayList<>();
        for (BsOrganizationVo bsOrganizationVo : tree) {
            //上级为null或者Pid不存在orgId集合中为根节点
            if (null==bsOrganizationVo.getParentId()||!orgIds.contains(bsOrganizationVo.getParentId())){
                rootNode.add(bsOrganizationVo);
            }
        }
        return rootNode;
    }
    private static void getChildren(BsOrganizationVo bsOrganizationVo){
        List<BsOrganizationVo> childNodesA = getChildNodesA(bsOrganizationVo);
        if (!childNodesA.isEmpty()){
            for (BsOrganizationVo organizationVo : childNodesA) {
                getChildren(organizationVo);
            }
            bsOrganizationVo.setChildren(childNodesA);
        }

    }
    private static List<BsOrganizationVo> getChildNodesA(BsOrganizationVo bsOrganizationVo){
        List<BsOrganizationVo> childNodesA=new ArrayList<>();
        for (BsOrganizationVo organizationVo : tree) {
            if (bsOrganizationVo.getOrgId().equals(organizationVo.getParentId())){
                childNodesA.add(organizationVo);
            }
        }
        return childNodesA;
    }
    public static void  setTree(List<BsOrganizationVo> lists){
        if (tree.isEmpty()){
            return;
        }
        //1.获取根节点
        List<BsOrganizationVo> rootNode=getRootNode();
        for (BsOrganizationVo bsOrganizationVo : rootNode) {
            getChildren(bsOrganizationVo);
            lists.add(bsOrganizationVo);
        }
        //遍历根节点
        //递归查询每一个根节点的子节点
    }
}
原文地址:https://www.cnblogs.com/shuixingshushuren/p/13582379.html