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中的树形菜单工具类。