要拿到所有的菜单权限并进行展示,可以通过以下步骤来实现:

步骤一:设计菜单权限数据结构 首先,需要设计一个菜单权限的数据结构,可以使用一个类来表示菜单项,例如:

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);

这样,就可以递归地展示所有的菜单权限,并且根据菜单项的层级进行缩进。

综上所述,通过设计合适的数据结构,构建菜单权限的层次结构,并通过递归遍历展示菜单权限,就可以拿到所有的菜单权限并进行展示。