TreeUtil---生成樹狀結構資料
阿新 • • 發佈:2020-08-29
/** * @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); } //遍歷根節點 //遞迴查詢每一個根節點的子節點 } }