请用Java使用递归方式实现菜单层级关系
时间: 2023-06-29 08:19:55 浏览: 54
好的,下面是使用Java实现递归方式实现菜单层级关系的代码示例:
```java
public class MenuItem {
private int id;
private String name;
private String url;
private List<MenuItem> subMenu;
// 省略构造方法和get、set方法
public String toHtml() {
StringBuilder sb = new StringBuilder();
sb.append("<li><a href=\"").append(url).append("\">").append(name).append("</a>");
if (subMenu != null && subMenu.size() > 0) {
sb.append("<ul>");
for (MenuItem subMenuItem : subMenu) {
sb.append(subMenuItem.toHtml());
}
sb.append("</ul>");
}
sb.append("</li>");
return sb.toString();
}
}
```
在上述代码中,`MenuItem` 表示菜单项的数据结构,包含菜单项的 ID、名称、URL 等信息,以及一个子菜单的列表。`toHtml()` 方法用于将菜单项及其子菜单转换为 HTML 代码。
在 `toHtml()` 方法中,我们首先将当前菜单项的名称和 URL 生成为一个菜单项的 HTML 代码,并将其添加到 `StringBuilder` 对象中。然后,如果当前菜单项有子菜单,就递归地调用 `toHtml()` 方法,将子菜单转换为 HTML 代码,并将其添加到 `StringBuilder` 对象中。最后,将整个菜单项的 HTML 代码作为字符串返回。
下面是使用示例:
```java
public static void main(String[] args) {
MenuItem menuItem1 = new MenuItem(1, "菜单1", "/menu1", null);
MenuItem menuItem2 = new MenuItem(2, "菜单2", "/menu2", null);
MenuItem menuItem3 = new MenuItem(3, "菜单3", "/menu3", null);
MenuItem subMenuItem1 = new MenuItem(4, "子菜单1", "/subMenu1", null);
MenuItem subMenuItem2 = new MenuItem(5, "子菜单2", "/subMenu2", null);
MenuItem subMenuItem3 = new MenuItem(6, "子菜单3", "/subMenu3", null);
List<MenuItem> subMenuItems = new ArrayList<>();
subMenuItems.add(subMenuItem1);
subMenuItems.add(subMenuItem2);
subMenuItems.add(subMenuItem3);
MenuItem menuItem4 = new MenuItem(7, "菜单4", "/menu4", subMenuItems);
List<MenuItem> menuItems = new ArrayList<>();
menuItems.add(menuItem1);
menuItems.add(menuItem2);
menuItems.add(menuItem3);
menuItems.add(menuItem4);
for (MenuItem menuItem : menuItems) {
System.out.println(menuItem.toHtml());
}
}
```
输出结果如下:
```html
<li><a href="/menu1">菜单1</a></li>
<li><a href="/menu2">菜单2</a></li>
<li><a href="/menu3">菜单3</a></li>
<li><a href="/menu4">菜单4</a><ul><li><a href="/subMenu1">子菜单1</a></li><li><a href="/subMenu2">子菜单2</a></li><li><a href="/subMenu3">子菜单3</a></li></ul></li>
```