From fc5cda9c324a91948dd964e91960623b41baf293 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期四, 02 一月 2025 10:55:44 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java | 41 ++++++++++++++++++++++++++--------------- 1 files changed, 26 insertions(+), 15 deletions(-) diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java index a0663ce..1356fee 100644 --- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java +++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -47,24 +48,34 @@ 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); + } + } + /** * 获取菜单列表 */ -- Gitblit v1.7.1