TreeUtil 数据库菜单生成无限级树形结构
2017-11-24 01:51
495 查看
1、项目需求:
从数据库从加载所有的菜单出来,菜单中有
id,parentId,name字段
希望能有一个工具帮我进行树形结构重组;
实例类:
工具类:
实力类不一致怎么办? 自己写一个实体转换类,将类的对象属性转换成上面的实体类,然后在调用,当然最快的方式直接修改实体类即可用。
参考:https://segmentfault.com/a/1190000011428318
从数据库从加载所有的菜单出来,菜单中有
id,parentId,name字段
希望能有一个工具帮我进行树形结构重组;
实例类:
package com.lming.chcservice.util; import lombok.Data; import java.util.List; @Data public class TreeNode { /** * 节点id */ private String id; /** * 父节点 默认0为根节点 */ private String parentId; /** * 节点名称 */ private String name; /** * 是否有子节点 */ private boolean hasChild; public TreeNode(String id, String parentId, String name) { this.id = id; this.parentId = parentId; this.name = name; } }
工具类:
package com.lming.chcservice.util; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 树形结构工具类 * * 将一组list对象转成树形结构 * 该list需符合设定的字段类型 * */ public class TreeUtil { public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>(); public List<TreeNode> menuCommon; public List<Object> list = new ArrayList<Object>(); public List<Object> treeMenu(List<TreeNode> menu){ this.menuCommon = menu; for (TreeNode treeNode : menu) { Map<String,Object> mapArr = new LinkedHashMap<String, Object>(); if(treeNode.getParentId().equals("0")){ setTreeMap(mapArr,treeNode); list.add(mapArr); } } return list; } public List<?> menuChild(String id){ List<Object> lists = new ArrayList<Object>(); for(TreeNode a:menuCommon){ Map<String,Object> childArray = new LinkedHashMap<String, Object>(); if(a.getParentId() .equals(id)){ setTreeMap(childArray,a); lists.add(childArray); } } return lists; } private void setTreeMap(Map<String,Object> mapArr,TreeNode treeNode){ mapArr.put("id", treeNode.getId()); mapArr.put("name", treeNode.getName()); mapArr.put("parentId", treeNode.getParentId()); List<?> childrens = menuChild(treeNode.getId()); if(childrens.size()>0){ mapArr.put("hasChild",true); } else{ mapArr.put("hasChildren",false); } mapArr.put("childrens", menuChild(treeNode.getId())); } public static void main(String[] args){ List<TreeNode> treeNodeList = new ArrayList<>(); TreeNode treeNode1 = new TreeNode("1","0","首页"); TreeNode treeNode2 = new TreeNode("2","0","订单"); TreeNode treeNode3 = new TreeNode("3","1","预约"); TreeNode treeNode4 = new TreeNode("4","2","捐献"); TreeNode treeNode5 = new TreeNode("5","4","我的订单"); TreeNode treeNode6 = new TreeNode("6","5","个人中心"); TreeNode treeNode7 = new TreeNode("7","6","个人中心2"); TreeNode treeNode8 = new TreeNode("8","99","个人中心3"); treeNodeList.add(treeNode1); treeNodeList.add(treeNode6); treeNodeList.add(treeNode5); treeNodeList.add(treeNode3); treeNodeList.add(treeNode4); treeNodeList.add(treeNode2); treeNodeList.add(treeNode7); treeNodeList.add(treeNode8); TreeUtil treeUtil = new TreeUtil(); System.out.print(JsonUtil.toJson(treeUtil.treeMenu(treeNodeList))); } }
测试结果:
[ { "id": "1", "name": "首页", "parentId": "0", "hasChild": true, "childrens": [ { "id": "3", "name": "预约", "parentId": "1", "hasChildren": false, "childrens": [] } ] }, { "id": "2", "name": "订单", "parentId": "0", "hasChild": true, "childrens": [ { "id": "4", "name": "捐献", "parentId": "2", "hasChild": true, "childrens": [ { "id": "5", "name": "我的订单", "parentId": "4", "hasChild": true, "childrens": [ { "id": "6", "name": "个人中心", "parentId": "5", "hasChild": true, "childrens": [ { "id": "7", "name": "个人中心2", "parentId": "6", "hasChildren": false, "childrens": [] } ] } ] } ] } ] } ]
实力类不一致怎么办? 自己写一个实体转换类,将类的对象属性转换成上面的实体类,然后在调用,当然最快的方式直接修改实体类即可用。
参考:https://segmentfault.com/a/1190000011428318
相关文章推荐
- EasyUI_tree根据数据库数据非迭代生成树形结构
- 数据库设计 采用左右值编码来存储无限分级树形结构_2 预排序遍历树算法(modified preorder tree traversal algorithm )
- 数据库设计 采用左右值编码来存储无限分级树形结构_1 预排序遍历树算法(modified preorder tree traversal algorithm )
- EasyUI_tree根据数据库数据生成树形结构JSON格式
- 关系数据库当中存放树形结构(同层有序),一次性生成对应树形菜单
- EasyUI_tree根据数据库数据非迭代生成树形结构
- EasyUI_tree根据数据库数据非迭代生成树形结构
- jquery+css+html无限级tree树形菜单(含复选框)
- 关于EasyUI使用tree方法生成树形结构加载两次的问题
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- vue中简单的无限树形结构tree.vue
- ssm maven easyui--tree生成树形结构图
- JavaScript递归方法 生成 json tree 树形结构数据
- Vue2组件tree实现无限级树形菜单
- 采用左右值编码来存储无限分级树形结构的数据库表设计
- java 生成 树形结构数据(tree)
- 从数据库读取数据动态生成树形菜单示例
- YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计
- 采用左右值编码来存储无限分级树形结构的数据库表设计
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)