java菜单有子菜单一个菜单列表 菜单字段 id name parenrid 按照菜单输出
时间: 2024-05-10 18:18:59 浏览: 113
JAVA 菜单栏
假设你已经得到了一个菜单列表,其中每个菜单都有一个 id、name 和 parentid 字段,那么你可以按照以下方式输出菜单:
1. 首先,我们需要确定顶级菜单。顶级菜单是 parentid 为 null 的菜单。我们可以将这些菜单存储在一个 List 中。
2. 对于每个顶级菜单,我们可以递归地遍历其子菜单,并在控制台上输出它们的名称。遍历子菜单时,我们可以使用一个辅助函数来找到当前菜单的子菜单。这个辅助函数应该接受当前菜单的 id 作为参数,并返回所有 parentid 等于该 id 的菜单。
下面是一个 Java 代码示例,演示如何按照菜单输出:
```java
import java.util.ArrayList;
import java.util.List;
public class Menu {
private int id;
private String name;
private Integer parentid;
// 构造函数和 getter/setter 略
public static void main(String[] args) {
// 假设这是数据库中存储的菜单列表
List<Menu> menus = new ArrayList<>();
menus.add(new Menu(1, "菜单1", null));
menus.add(new Menu(2, "菜单2", null));
menus.add(new Menu(3, "子菜单1", 1));
menus.add(new Menu(4, "子菜单2", 1));
menus.add(new Menu(5, "子菜单3", 2));
menus.add(new Menu(6, "子子菜单1", 3));
menus.add(new Menu(7, "子子菜单2", 3));
// 输出菜单
List<Menu> topLevelMenus = getTopLevelMenus(menus);
for (Menu menu : topLevelMenus) {
printMenu(menu, "", menus);
}
}
private static List<Menu> getTopLevelMenus(List<Menu> menus) {
List<Menu> topLevelMenus = new ArrayList<>();
for (Menu menu : menus) {
if (menu.getParentid() == null) {
topLevelMenus.add(menu);
}
}
return topLevelMenus;
}
private static void printMenu(Menu menu, String prefix, List<Menu> menus) {
System.out.println(prefix + menu.getName());
List<Menu> subMenus = getSubMenus(menu.getId(), menus);
for (Menu subMenu : subMenus) {
printMenu(subMenu, prefix + " ", menus);
}
}
private static List<Menu> getSubMenus(int parentId, List<Menu> menus) {
List<Menu> subMenus = new ArrayList<>();
for (Menu menu : menus) {
if (menu.getParentid() != null && menu.getParentid() == parentId) {
subMenus.add(menu);
}
}
return subMenus;
}
}
```
在这个示例中,我们首先定义了一个 Menu 类来表示菜单。然后,我们创建了一个菜单列表,并使用 getTopLevelMenus() 方法找到顶级菜单。接下来,我们使用 printMenu() 方法递归地遍历每个顶级菜单,并输出它们的名称。在每个菜单名称前面,我们添加了一个前缀,该前缀的长度取决于菜单的层次结构。最后,我们使用 getSubMenus() 方法找到每个菜单的子菜单。
阅读全文