将数据库中的父子结构(id和parentId)的数据转成树状结构 方便的查询树中的节点,某个几节点的所有父级等
-
添加maven依赖
<dependency> <groupId>io.github.guoyixing</groupId> <artifactId>tree</artifactId> <version>1.0</version> </dependency>
-
将需要的树结构化的类添加TreeI接口
public class Menu implements TreeI { private String id; private String parentId; private String name; /* 省略getter、setter */ @Override public String getTreeId() { return getId(); } @Override public String getTreeParentId() { return getParentId(); } @Override public String getTreeName() { return getName(); } }
-
生成树结构
public class Test { public static void main(String[] args) { List<Menu> menuList = new ArrayList<>(); menuList.add(new Menu("1", "0", "一级菜单1")); menuList.add(new Menu("2","0","一级菜单2")); menuList.add(new Menu("1-1","1","二级菜单1")); menuList.add(new Menu("1-2","2","二级菜单2")); menuList.add(new Menu("1-1-1","1-1","三级级菜单1")); menuList.add(new Menu("1-1-2","1-1","三级级菜单2")); //树结构 List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest(); } }
-
效果
[ { "id": "1", "parentId": "0", "name": "一级菜单1" }, { "id": "2", "parentId": "0", "name": "一级菜单2" }, { "id": "1-1", "parentId": "0", "name": "二级菜单1" }, { "id": "1-2", "parentId": "0", "name": "二级菜单2" }, { "id": "1-1-1", "parentId": "0", "name": "三级级菜单1" }, { "id": "1-2-2", "parentId": "0", "name": "三级级菜单2" } ]
转成
[ { "id": "1", "name": "一级菜单1", "nodeData": { "id": "1", "parentId": "0", "name": "一级菜单1" }, "total": 1, "parent": [], "children": [ { "id": "1-1", "name": "二级菜单1", "nodeData": { "id": "1-1", "parentId": "1", "name": "二级菜单1" }, "total": 2, "parent": [ { "id": "1", "parentId": "0", "name": "一级菜单1" } ], "children": [ { "id": "1-1-1", "name": "三级级菜单1", "nodeData": { "id": "1-1-1", "parentId": "1-1", "name": "三级级菜单1" }, "total": 0, "parent": [ { "id": "1", "parentId": "0", "name": "一级菜单1" }, { "id": "1-1", "parentId": "1", "name": "二级菜单1" } ], "children": [], "level": 3 }, { "id": "1-1-2", "name": "三级级菜单2", "nodeData": { "id": "1-1-2", "parentId": "1-1", "name": "三级级菜单2" }, "total": 0, "parent": [ { "id": "1", "parentId": "0", "name": "一级菜单1" }, { "id": "1-1", "parentId": "1", "name": "二级菜单1" } ], "children": [], "level": 3 } ], "level": 2 } ], "level": 1 }, { "id": "2", "name": "一级菜单2", "nodeData": { "id": "2", "parentId": "0", "name": "一级菜单2" }, "total": 1, "parent": [], "children": [ { "id": "1-2", "name": "二级菜单2", "nodeData": { "id": "1-2", "parentId": "2", "name": "二级菜单2" }, "total": 0, "parent": [ { "id": "2", "parentId": "0", "name": "一级菜单2" } ], "children": [], "level": 2 } ], "level": 1 } ]
List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest();
Tree<Menu> node = TreeUtils.getNode(trees, "1");
List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest();
Tree<Menu> node = TreeUtils.getNode(trees, "1");
Menu nodeData = node.getNodeData();
List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest();
Tree<Menu> node = TreeUtils.getNode(trees, "1");
List<Menu> parent = node.getParent();
List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest();
Tree<Menu> node = TreeUtils.getNode(trees, "1");
List<Tree<Menu>> children = node.getChildren();
List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest();
List<Tree<Menu>> allLeaf = TreeUtils.getAllLeaf(trees);
List<Tree<Menu>> trees = new TreeUtils<>(menuList).buildForest();
List<Tree<Menu>> treeList = TreeUtils.toList(trees);
List<Tree<Menu>> trees = new TreeUtils<>(menuList)
.setSort(Comparator.comparing(t1 -> t1.getNodeData().getSortOrder()))
.buildForest();