日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

父子树状结构图

發(fā)布時間:2023/12/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 父子树状结构图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

遍歷獲取父子樹狀結(jié)構(gòu)的MAP集合。
用Map集合通用性比較高。

private List<Map<String, Object>> treeMenuList(List<Map<String, Object>> childMenu, List<Map<String, Object>> allMenu, String pid) {for (Map<String, Object> map : allMenu) {String supdepid = map.get("parentId") == null ? null : map.get("parentId").toString();String departmentId = map.get("id") == null ? null : map.get("id").toString();if (pid.equals(supdepid)) {List<Map<String, Object>> childrenList = treeMenuList(new ArrayList<>(), allMenu, departmentId);map.put("childrenDepartment", childrenList);childMenu.add(map);}}return childMenu;}

當(dāng)父子樹狀圖需要對一個對象集合來操作的時候

/*** 根據(jù)工號,和系統(tǒng)的id(mark) 來獲取菜單的框架,分級那種。* @param menuQueryBo* @return*//*** 利用遞歸循環(huán)查詢* 每一層查詢其員工封裝到一個對象map集合中* 員工是根據(jù)部門的id來查詢的,一對多* 和查詢部門封裝到一個對象map集合中* 當(dāng)根據(jù)父id查詢不到部門的時候循環(huán)結(jié)束。*///全局變量private List<MenuVO> allDepartment = new ArrayList<>(); //全局變量@Overridepublic Response<List<MenuVO>> getMenuByworkCodeAndSystemIdForFrame(MenuQueryBo menuQueryBo) {//先獲取所有的數(shù)據(jù) 該數(shù)據(jù)取 沒有做父子類的數(shù)據(jù),List<MenuBO> data = this.getMenuByworkCodeAndSystemId(menuQueryBo).getData();if (data == null || data.size() == 0) {Response response = new Response();response.setCode(0);response.setMessage("沒有關(guān)聯(lián)的菜單");return response;}/*** 找到符合條件的角色的所有父類直到parentId為0;*/List<MenuVO> datumList = new ArrayList<>();//把獲取的值給全值集合for (MenuBO datum : data) {//getMenuVOParent(datum);allDepartment.add(MenuBOTransformVO.boToVO(datum));}List<MenuVO> menuVOList = new ArrayList<>();/* for (MenuVO datum : allDepartment) {//得到所有符合條件的menuVO集合// allDepartment.add(MenuBOTransformVO.boToVO(datum));if (datum.getParentId() == 0) {menuVOList.add(datum);}}*/for (int i = 0; i < allDepartment.size(); i++) {if (allDepartment.get(i).getParentId() == 0) {menuVOList.add(allDepartment.get(i));}}if (!menuVOList.isEmpty()) {List<MenuVO> list = new ArrayList<>();if (menuVOList != null) {for (int i = 0; i < menuVOList.size(); i++) {list.add(recursiveTree(menuVOList.get(i).getId())); //獲取一級節(jié)點(diǎn)的對象id}}allDepartment.clear();return Response.success(list);} else {//此時父id不是0;for (MenuVO menuVO : allDepartment) {List<MenuVO> menuVOList1 = new ArrayList<>();for (MenuVO menuVO1 : allDepartment) {if (menuVO.getParentId() == menuVO1.getId()) {menuVOList1.add(menuVO);}}if (menuVOList1.isEmpty()) {menuVOList.add(menuVO);}}List<MenuVO> list = new ArrayList<>();if (menuVOList != null) {for (int i = 0; i < menuVOList.size(); i++) {list.add(recursiveTree(menuVOList.get(i).getId())); //獲取一級節(jié)點(diǎn)的對象id}}allDepartment.clear();return Response.success(list);}}/*** 遞歸算法解析成樹形結(jié)構(gòu)** @param cid*/public MenuVO recursiveTree(Integer cid) {MenuVO node = new MenuVO();for (MenuVO menuVO : allDepartment) {if (menuVO.getId() == cid) {BeanUtils.copyProperties(menuVO, node);}}List<MenuVO> childTreeNodes = getChildTreeById(cid);for (MenuVO child : childTreeNodes) {MenuVO n = recursiveTree(child.getId());node.getChildren().add(n);}return node;}/*** 根據(jù)CID查詢節(jié)點(diǎn)對象*/public HrmDepartmentVO HrmDepartmentPO(Integer cid) {Map map = getTreeMap();return (HrmDepartmentVO) map.get(cid);}/*** 一次性取所有數(shù)據(jù),為了減少對數(shù)據(jù)庫查詢操作** @return*/public Map getTreeMap() {Map map = new HashMap<Integer, HrmDepartmentPO>();if (null != allDepartment) {for (MenuVO d : allDepartment) {map.put(d.getId(), d);}}return map;}/*** 根據(jù)父節(jié)點(diǎn)CID獲取所有了節(jié)點(diǎn)*/public List<MenuVO> getChildTreeById(Integer cid) {List<MenuVO> list = new ArrayList<>();if (null != allDepartment) {for (MenuVO d : allDepartment) {if (null != cid) {if (cid.equals(d.getParentId())) {list.add(d);}}}}return list;}

總結(jié)

以上是生活随笔為你收集整理的父子树状结构图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。