| | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | if (menus.size() == 0) { |
| | | return AjaxResult.success(new ArrayList<>()); |
| | | } |
| | | // 第三级 |
| | | List<SysMenu> s3 = menus.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList()); |
| | | // 第二级 |
| | | List<SysMenu> s2 = menus.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList()); |
| | | // 第一级 |
| | | List<SysMenu> s1 = menus.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList()); |
| | | |
| | | for (SysMenu menu : s2) { |
| | | List<SysMenu> collect = s3.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList()); |
| | | menu.setChildren(collect); |
| | | } |
| | | for (SysMenu menu : s1) { |
| | | List<SysMenu> collect = s2.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList()); |
| | | menu.setChildren(collect); |
| | | } |
| | | |
| | | List<SysMenu> s1 = menus.stream().filter(e -> e.getMenuType().equals("M") && e.getParentId().equals(0L)).collect(Collectors.toList()); |
| | | // 构建以 parentId 为键的 Map |
| | | Map<Long, List<SysMenu>> menuMap = menus.stream() |
| | | .collect(Collectors.groupingBy(SysMenu::getParentId)); |
| | | // 构建树形结构 |
| | | buildMenuTree(menuMap, s1); |
| | | return AjaxResult.success(s1); |
| | | } |
| | | |
| | | /** |
| | | * 封装树形层级 |
| | | * |
| | | * @param menuMap |
| | | * @param s1 |
| | | */ |
| | | public void buildMenuTree(Map<Long, List<SysMenu>> menuMap, List<SysMenu> s1) { |
| | | for (SysMenu sysMenu : s1) { |
| | | // 获取当前菜单的子级 |
| | | List<SysMenu> children = menuMap.getOrDefault(sysMenu.getMenuId(), new ArrayList<>()); |
| | | sysMenu.setChildren(children); |
| | | //移除当前菜单 |
| | | menuMap.remove(sysMenu.getMenuId()); |
| | | // 递归设置子级菜单 |
| | | buildMenuTree(menuMap, children); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取菜单列表 |
| | | */ |