java菜单递归工具类_MenuTreeUtil菜单树形递归工具类

这是一个Java编写的MenuTreeUtil工具类,用于组装菜单树结构。它包含两个主要方法:`getTree`用于构建整个菜单树,`buildTree`进行递归遍历并构造子菜单。通过获取一级目录的菜单,该工具类能帮助构建一个多级菜单的树形结构。示例展示了如何使用这个工具类来根据用户ID获取权限树菜单。
摘要由CSDN通过智能技术生成

package com.aaa.util;

import com.aaa.controller.vm.MenuVM;

import com.aaa.entity.Menu;

import java.util.ArrayList;

import java.util.List;

/**

* 组装菜单树工具类

* Created by cws

* @author Administrator

*/

public class MenuTreeUtil {

public static MenuVM getTree(List

//判断是否有获取到数据

if (list == null || list.size() < 1) {

return null;

}

return buildTree(getRoot(list), list);

}

private static MenuVM buildTree(MenuVM pnode, List

List childs = new ArrayList<>();

for (Menu tmp : nodes) {

if (pnode.getId().equals(tmp.getParentId())) {

childs.add(new MenuVM(tmp));

}

}

//二次递归遍历子节点

if (childs.size() > 0) {

pnode.setSubMenu(childs);

for (MenuVM ptmp : childs) {

buildTree(ptmp, nodes);

}

}

return pnode;

}

/**

* 获取一级目录

*

* @param list

*/

private static MenuVM getRoot(List

for (Menu po : list) {

if ("#".equals(po.getParentId())) {

return new MenuVM(po);

}

}

return null;

}

/**

* @param list

*/

public static List getMenu(List

//判断是否有获取到数据

if (list == null || list.size() < 1) {

return null;

}

return getTree(list) == null ? null : getTree(list).getSubMenu();

}

}`

<>

## 例如:

```/**

* 根据用户id查找权限树菜单

* @param userId

* @return

*/

@Override

public List getMenu(String userId) {

List

return MenuTreeUtil.getMenu(menuList);

}`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一个Java转换树形结构工具类的示例:public class TreeNodeConverter { public static TreeNode convert(Object object) { if (object instanceof TreeNode) { return (TreeNode)object; } TreeNode root = new TreeNode(object); if (object instanceof Map) { Map<Object, Object> map = (Map<Object, Object>)object; for (Object key : map.keySet()) { TreeNode child = convert(map.get(key)); root.add(child); } } else if (object instanceof List) { List<Object> list = (List<Object>)object; for (Object item : list) { TreeNode child = convert(item); root.add(child); } } return root; } } ### 回答2: Java中转换树形结构的工具类可以通过递归来实现。以下是一个简单的示例代码: ```java import java.util.ArrayList; import java.util.List; class TreeNode { private int id; private String name; private List<TreeNode> children; public TreeNode(int id, String name) { this.id = id; this.name = name; this.children = new ArrayList<>(); } public void addChild(TreeNode child) { this.children.add(child); } public int getId() { return id; } public String getName() { return name; } public List<TreeNode> getChildren() { return children; } } public class TreeConverter { public static TreeNode convertToTree(List<TreeNode> nodes) { TreeNode root = null; for (TreeNode node : nodes) { if (node.getId() == 0) { root = node; } else { TreeNode parent = findParent(root, node); if (parent != null) { parent.addChild(node); } } } return root; } private static TreeNode findParent(TreeNode root, TreeNode node) { if (root.getId() == node.getId() / 10) { return root; } for (TreeNode child : root.getChildren()) { TreeNode parent = findParent(child, node); if (parent != null) { return parent; } } return null; } public static void main(String[] args) { List<TreeNode> nodes = new ArrayList<>(); nodes.add(new TreeNode(0, "Root")); nodes.add(new TreeNode(10, "Node1")); nodes.add(new TreeNode(11, "Node2")); nodes.add(new TreeNode(110, "Node3")); nodes.add(new TreeNode(111, "Node4")); TreeNode root = convertToTree(nodes); printTree(root, 0); } private static void printTree(TreeNode node, int level) { StringBuilder prefix = new StringBuilder(); for (int i = 0; i < level; i++) { prefix.append("--"); } System.out.println(prefix + node.getName()); for (TreeNode child : node.getChildren()) { printTree(child, level + 1); } } } ``` 以上代码定义了一个`TreeNode`类表示的节点,节点有id、name和子节点列表。`TreeConverter`类中有一个`convertToTree`方法,它接收一个节点列表,将节点转换成树形结构,最终返回根节点。`findParent`方法用递归方式寻找节点的父节点。`main`方法中创建了一些节点,并调用`convertToTree`方法将它们转换成结构,然后使用`printTree`方法打印出的结构。 以上是一个简单的树形结构转换工具类示例。在实际使用中,可以根据需求进行适当的修改和扩展。 ### 回答3: Java转换树形结构的工具类可以提供对树形结构的转换和操作功能,主要包括的创建、遍历、查找、插入、删除等操作。以下是一个简单的示例工具类: ```java import java.util.ArrayList; import java.util.List; class TreeNode { private int value; private List<TreeNode> children; public TreeNode(int value) { this.value = value; children = new ArrayList<>(); } public int getValue() { return value; } public List<TreeNode> getChildren() { return children; } public void addChild(TreeNode child) { children.add(child); } } public class TreeUtil { public static TreeNode createTree(List<Integer> values) { TreeNode root = null; for (int value : values) { if (root == null) { root = new TreeNode(value); } else { insertNode(root, value); } } return root; } private static void insertNode(TreeNode root, int value) { if (root.getValue() >= value) { for (TreeNode child : root.getChildren()) { if (child.getValue() >= value) { insertNode(child, value); return; } } TreeNode newNode = new TreeNode(value); root.addChild(newNode); } else { TreeNode newNode = new TreeNode(value); newNode.addChild(root); root = newNode; } } public static void preOrderTraversal(TreeNode root) { if (root == null) { return; } System.out.println(root.getValue()); for (TreeNode child : root.getChildren()) { preOrderTraversal(child); } } public static void main(String[] args) { List<Integer> values = new ArrayList<>(); values.add(3); values.add(1); values.add(5); values.add(4); values.add(6); TreeNode root = createTree(values); preOrderTraversal(root); } } ``` 此示例中的`TreeNode`类表示的节点,包含一个值属性和一个子节点列表。`TreeUtil`工具类提供了创建、插入节点和前序遍历等功能方法。`createTree`方法根据传入的整数列表创建一个,`preOrderTraversal`方法对进行前序遍历打印节点值。 在`main`方法中,我们通过传入一个整数列表创建了一个,并对进行了前序遍历输出。这是一个简单示例,你可以根据实际需求来扩展工具类的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值