當前位置:
首頁 >
父子树状结构图
發布時間:2023/12/29
34
豆豆
遍歷獲取父子樹狀結構的MAP集合。
用Map集合通用性比較高。
當父子樹狀圖需要對一個對象集合來操作的時候
/*** 根據工號,和系統的id(mark) 來獲取菜單的框架,分級那種。* @param menuQueryBo* @return*//*** 利用遞歸循環查詢* 每一層查詢其員工封裝到一個對象map集合中* 員工是根據部門的id來查詢的,一對多* 和查詢部門封裝到一個對象map集合中* 當根據父id查詢不到部門的時候循環結束。*///全局變量private List<MenuVO> allDepartment = new ArrayList<>(); //全局變量@Overridepublic Response<List<MenuVO>> getMenuByworkCodeAndSystemIdForFrame(MenuQueryBo menuQueryBo) {//先獲取所有的數據 該數據取 沒有做父子類的數據,List<MenuBO> data = this.getMenuByworkCodeAndSystemId(menuQueryBo).getData();if (data == null || data.size() == 0) {Response response = new Response();response.setCode(0);response.setMessage("沒有關聯的菜單");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())); //獲取一級節點的對象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())); //獲取一級節點的對象id}}allDepartment.clear();return Response.success(list);}}/*** 遞歸算法解析成樹形結構** @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;}/*** 根據CID查詢節點對象*/public HrmDepartmentVO HrmDepartmentPO(Integer cid) {Map map = getTreeMap();return (HrmDepartmentVO) map.get(cid);}/*** 一次性取所有數據,為了減少對數據庫查詢操作** @return*/public Map getTreeMap() {Map map = new HashMap<Integer, HrmDepartmentPO>();if (null != allDepartment) {for (MenuVO d : allDepartment) {map.put(d.getId(), d);}}return map;}/*** 根據父節點CID獲取所有了節點*/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;}總結
- 上一篇: ai将会怎样影响计算机的发展,就目前人工
- 下一篇: java 图像傅里叶变换_图像频域滤波与