Java封装的树形菜单工具类
在开发软件时,我们经常会遇到需要展示树形菜单的需求,比如文件目录结构、商品分类等。在Java中,我们可以通过封装一个树形菜单工具类来简化这个过程,提高代码的复用性和可维护性。本文将介绍如何使用Java封装的树形菜单工具类来创建树形菜单,并展示树形菜单的使用示例。
树形菜单工具类代码示例
下面是一个简单的树形菜单工具类代码示例,该类包含了节点类TreeNode
和树形菜单类TreeMenu
,通过递归方式构建树形菜单结构。
public class TreeNode {
private Long id;
private Long parentId;
private String name;
private List<TreeNode> children;
// getters and setters
}
public class TreeMenu {
private List<TreeNode> nodes;
public TreeMenu(List<TreeNode> nodes) {
this.nodes = nodes;
}
public List<TreeNode> buildTree() {
List<TreeNode> tree = new ArrayList<>();
Map<Long, TreeNode> nodeMap = new HashMap<>();
for (TreeNode node : nodes) {
nodeMap.put(node.getId(), node);
}
for (TreeNode node : nodes) {
if (node.getParentId() == null) {
tree.add(node);
} else {
TreeNode parent = nodeMap.get(node.getParentId());
if (parent != null) {
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(node);
}
}
}
return tree;
}
}
使用示例
假设我们有以下节点数据:
TreeNode node1 = new TreeNode(1L, null, "Root");
TreeNode node2 = new TreeNode(2L, 1L, "Node 1");
TreeNode node3 = new TreeNode(3L, 1L, "Node 2");
TreeNode node4 = new TreeNode(4L, 2L, "Node 1.1");
TreeNode node5 = new TreeNode(5L, 2L, "Node 1.2");
List<TreeNode> nodes = Arrays.asList(node1, node2, node3, node4, node5);
TreeMenu treeMenu = new TreeMenu(nodes);
List<TreeNode> tree = treeMenu.buildTree();
// 输出树形菜单
for (TreeNode node : tree) {
printNode(node, 0);
}
private static void printNode(TreeNode node, int level) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < level; i++) {
sb.append(" ");
}
sb.append(node.getName());
System.out.println(sb.toString());
if (node.getChildren() != null) {
for (TreeNode child : node.getChildren()) {
printNode(child, level + 1);
}
}
}
运行以上代码,将输出如下树形菜单:
Root
Node 1
Node 1.1
Node 1.2
Node 2
流程图
使用mermaid语法绘制树形菜单生成流程图,如下所示:
flowchart TD
A[开始] --> B[初始化节点列表]
B --> C[构建节点映射]
C --> D[构建树形菜单]
D --> E[返回树形菜单]
E --> F[结束]
饼状图
使用mermaid语法绘制一个简单的饼状图,如下所示:
pie
title 树形菜单节点比例
"Root" : 40
"Node 1" : 30
"Node 2" : 30
通过封装的树形菜单工具类,我们可以方便地构建树形菜单结构,提高代码的可读性和可维护性。希望本文能够帮助读者更好地理解和使用Java中的树形菜单工具类。