👑 博主简介:知名开发工程师
👣 出没地点:北京
💊 2023年目标:成为一个大佬
———————————————————————————————————————————
版权声明:本文为原创文章,如需转载须注明出处,喜欢可收藏!
一. 设计一个节点实体类
public class PmTreeNode {
private String id;
private String parent_id;
private String label;
private List<PmTreeNode> children;
public PmTreeNode(String id, String parent_id, String label) {
this.id = id;
this.parent_id = parent_id;
this.label = label;
}
// 省略 get/set 方法
}
二. 工具类
public class PmTreeNodeBuilder {
private List<PmTreeNode> pmList;
public PmTreeNodeBuilder(List<PmTreeNode> pmList) {
this.pmList = pmList;
}
//建立树形结构
public List<PmTreeNode> builTree() {
List<PmTreeNode> treeMenus = new ArrayList<>();
for (PmTreeNode menuNode : getRootNode()) {
menuNode = buildChilTree(menuNode);
treeMenus.add(menuNode);
}
return treeMenus;
}
//递归,建立子树形结构
private PmTreeNode buildChilTree(PmTreeNode pNode) {
List<PmTreeNode> chilMenus = new ArrayList<>();
for (PmTreeNode pmNode : pmList) {
if (pmNode.getParent_id().equals(pNode.getId())) {
chilMenus.add(buildChilTree(pmNode));
}
}
if (chilMenus.size()>0){
pNode.setChildren(chilMenus);
}
return pNode;
}
//获取所有根节点
private List<PmTreeNode> getRootNode() {
List<PmTreeNode> rootList = new ArrayList<>();
for (PmTreeNode node : pmList) {
String parentId = node.getParent_id();
if (StringUtils.isEmpty(parentId) || parentId.equals("0")) {
rootList.add(node);
}
}
return rootList;
}
}
三. 测试
public static void main(String[] args) {
List<PmTreeNode> menuList = new ArrayList<>();
/*插入一些数据*/
menuList.add(new PmTreeNode("1", "0", "系统管理"));
menuList.add(new PmTreeNode("2", "1", "权限管理"));
menuList.add(new PmTreeNode("3", "1", "密码修改"));
menuList.add(new PmTreeNode("4", "1", "新加用户"));
menuList.add(new PmTreeNode("5", "1", "系统监控"));
menuList.add(new PmTreeNode("6", "1", "在线用户"));
menuList.add(new PmTreeNode("7", "0", "行政管理"));
menuList.add(new PmTreeNode("8", "7", "审批管理"));
menuList.add(new PmTreeNode("9", "7", "合同管理"));
menuList.add(new PmTreeNode("10", "0", "项目管理"));
/*让我们创建树*/
PmTreeNodeBuilder menuTree = new PmTreeNodeBuilder(menuList);
menuList = menuTree.builTree();
/*转为json看看效果*/
String jsonOutput = JSON.toJSONString(menuList);
System.out.println(jsonOutput);
}