要拿到所有的菜单权限并进行展示,可以通过以下步骤来实现:
步骤一:设计菜单权限数据结构 首先,需要设计一个菜单权限的数据结构,可以使用一个类来表示菜单项,例如:
public class MenuItem {
private String id;
private String name;
private String parentId;
// 构造方法、getters和setters省略
}
其中,id
表示菜单项的唯一标识,name
表示菜单项的名称,parentId
表示父菜单项的id(根菜单项的parentId
设为null)。
步骤二:构建菜单权限数据 通过数据库或者其他方式获取到所有的菜单权限数据,并构建菜单权限的层次结构。可以使用一个列表来存储所有的菜单项,例如:
List<MenuItem> menuItems = new ArrayList<>();
// 假设从数据库中获取到了菜单权限数据
// 将数据库中的每一行数据转换为MenuItem对象,添加到menuItems列表中
步骤三:构建菜单权限树
根据菜单项的parentId
属性,将菜单项构建为一棵树。可以使用一个Map来存储菜单项,以便通过菜单项的id快速获取菜单项对象。例如:
Map<String, MenuItem> menuItemMap = new HashMap<>();
for (MenuItem menuItem : menuItems) {
menuItemMap.put(menuItem.getId(), menuItem);
}
// 构建菜单权限树
for (MenuItem menuItem : menuItems) {
String parentId = menuItem.getParentId();
if (parentId != null) {
MenuItem parentItem = menuItemMap.get(parentId);
parentItem.addChild(menuItem);
}
}
这样,通过根菜单项就可以递归地遍历整个菜单权限树。
步骤四:展示菜单权限 通过深度优先遍历菜单权限树,可以拿到所有的菜单权限,并进行展示。可以使用递归的方式实现,例如:
void displayMenu(MenuItem menuItem, int level) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < level; i++) {
sb.append(" "); // 每一层缩进两个空格
}
sb.append(menuItem.getName());
System.out.println(sb.toString());
// 递归展示子菜单权限
List<MenuItem> children = menuItem.getChildren();
for (MenuItem child : children) {
displayMenu(child, level + 1);
}
}
// 在某个入口方法中调用displayMenu方法
displayMenu(rootMenuItem, 0);
这样,就可以递归地展示所有的菜单权限,并且根据菜单项的层级进行缩进。
综上所述,通过设计合适的数据结构,构建菜单权限的层次结构,并通过递归遍历展示菜单权限,就可以拿到所有的菜单权限并进行展示。