Java递归实现菜单树的方法详解
什么是菜单树?
菜单树是指一种树型结构,用于构建菜单导航等应用场景。菜单树有根节点、叶子节点和中间节点,每个节点表示一个菜单项,叶子节点表示最底层的菜单项,中间节点表示包含了子菜单项的菜单项。
递归实现菜单树的方法
递归实现菜单树的方法,是指通过递归方式,构建菜单树的树型结构。具体实现步骤如下:
-
定义菜单项节点类MenuNode。该类应至少包含以下字段:
-
菜单项节点内容:name
- 菜单项URL链接:url
- 子菜单项列表:children
MenuNode类可以定义为如下形式:
```java
public class MenuNode {
private String name;
private String url;
private List
// getter/setter方法
// 构造函数等
// 以下是递归实现菜单树的方法
public void addChild(MenuNode child) {
if (this.children == null) {
this.children = new ArrayList<>();
}
this.children.add(child);
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{name: ")
.append(name)
.append(", url: ")
.append(url);
if (children != null && children.size() > 0) {
sb.append(", children: [");
for (MenuNode node : children) {
sb.append(node.toString()).append(",");
}
sb.deleteCharAt(sb.length() - 1)
.append("]");
}
sb.append("}");
return sb.toString();
}
public MenuNode find(String name) {
if (this.name.equals(name)) {
return this;
}
if (this.children != null) {
for (MenuNode child : this.children) {
MenuNode node = child.find(name);
if (node != null) {
return node;
}
}
}
return null;
}
}
```
-
构建菜单项节点列表。该列表应至少包含以下菜单项:
-
首页:首页菜单项不包含子菜单项,URL链接为首页链接。
- 新闻:新闻菜单项包含子菜单项,URL链接为空。
- 国际新闻:国际新闻菜单项不包含子菜单项,URL链接为国际新闻链接。
- 国内新闻:国内新闻菜单项不包含子菜单项,URL链接为国内新闻链接。
- 体育:体育菜单项不包含子菜单项,URL链接为体育链接。
- 文化:文化菜单项包含子菜单项,URL链接为空。
- 书画:书画菜单项不包含子菜单项,URL链接为书画链接。
- 雕塑:雕塑菜单项不包含子菜单项,URL链接为雕塑链接。
下面是构建菜单项节点列表的代码:
```java
public class MenuTree {
public List
List
MenuNode home = new MenuNode("首页", "/index.jsp");
nodes.add(home);
MenuNode news = new MenuNode("新闻", "");
news.addChild(new MenuNode("国际新闻", "/news/world.jsp"));
news.addChild(new MenuNode("国内新闻", "/news/china.jsp"));
nodes.add(news);
nodes.add(new MenuNode("体育", "/sports.jsp"));
MenuNode culture = new MenuNode("文化", "");
culture.addChild(new MenuNode("书画", "/culture/painting.jsp"));
culture.addChild(new MenuNode("雕塑", "/culture/sculpture.jsp"));
nodes.add(culture);
return nodes;
}
}
```
- 从菜单项节点列表中,构建菜单树。菜单树的根节点应该是一个虚拟节点,它不包含任何菜单项,只作为菜单树的根节点。
下面是构建菜单树的方法:
```java
public class MenuTreeBuilder {
public MenuNode build(List
MenuNode root = new MenuNode("root", "");
for (MenuNode node : nodes) {
root.addChild(node);
}
return root;
}
}
```
- 输出菜单树的JSON格式。菜单树的JSON格式应该按照以下格式输出:
json
{
"name": "root",
"url": "",
"children": [
{
"name": "首页",
"url": "/index.jsp"
},
{
"name": "新闻",
"url": "",
"children": [
{
"name": "国际新闻",
"url": "/news/world.jsp"
},
{
"name": "国内新闻",
"url": "/news/china.jsp"
}
]
},
{
"name": "体育",
"url": "/sports.jsp"
},
{
"name": "文化",
"url": "",
"children": [
{
"name": "书画",
"url": "/culture/painting.jsp"
},
{
"name": "雕塑",
"url": "/culture/sculpture.jsp"
}
]
}
]
}
下面是输出菜单树JSON格式的代码:
java
public class MenuTreePrinter {
public String print(MenuNode root) {
return root.toString();
}
}
示例说明
我们通过以下代码,来演示如何使用上述方法构建菜单树和输出菜单树的JSON格式:
public class MenuTreeTest {
public static void main(String[] args) {
MenuTree menuTree = new MenuTree();
List<MenuNode> nodes = menuTree.build();
MenuTreeBuilder builder = new MenuTreeBuilder();
MenuNode root = builder.build(nodes);
MenuTreePrinter printer = new MenuTreePrinter();
System.out.println(printer.print(root));
}
}
输出结果如下:
{
"name": "root",
"url": "",
"children": [
{
"name": "首页",
"url": "/index.jsp"
},
{
"name": "新闻",
"url": "",
"children": [
{
"name": "国际新闻",
"url": "/news/world.jsp"
},
{
"name": "国内新闻",
"url": "/news/china.jsp"
}
]
},
{
"name": "体育",
"url": "/sports.jsp"
},
{
"name": "文化",
"url": "",
"children": [
{
"name": "书画",
"url": "/culture/painting.jsp"
},
{
"name": "雕塑",
"url": "/culture/sculpture.jsp"
}
]
}
]
}
通过以上演示,可以看到如何使用递归实现菜单树的方法,构建菜单树的树型结构,并输出菜单树的JSON格式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java递归实现菜单树的方法详解 - Python技术站