1. 程式人生 > 實用技巧 >TreeUtil---生成樹狀結構資料

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); } //遍歷根節點 //遞迴查詢每一個根節點的子節點 } }