父子树状结构图
遍歷獲取父子樹狀結(jié)構(gòu)的MAP集合。
用Map集合通用性比較高。
當(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é)
- 上一篇: ai将会怎样影响计算机的发展,就目前人工
- 下一篇: WIN10bios重装系统的一些小问题