Java 后端封装自关联菜单表数据
封装菜单表递归方法 diGuiMenu(),自关联表数据
话不多说,上代码
/** * 封装菜单集合 * @param rootMenu 角色对应所有菜单 * @return */ private List<Menu> diGuiMenu(List<Menu> rootMenu) { // Map<Integer, List<Menu>> groupByParentMap = menuList.stream().collect(Collectors.groupingBy(Menu::getParentId)); ////rootMenu所有菜单的集合 List<Menu> menuList = new ArrayList<Menu>(); // 先找到所有的一级菜单 for (int i = 0; i < rootMenu.size(); i++) { // 一级菜单没有parentId if (StringUtils.isEmpty(rootMenu.get(i).getParentId())) { menuList.add(rootMenu.get(i)); } } // 为一级菜单设置子菜单,getChild是递归调用的 for (Menu menu : menuList) { List<Menu> childs = getChild(menu.getId().toString(), rootMenu); if (childs != null && childs.size() > 0) { menu.setList(childs); } } return menuList; } private List<Menu> getChild(String id, List<Menu> rootMenu) { // 子菜单 List<Menu> childList = new ArrayList<Menu>(); for (Menu menu : rootMenu) { // 遍历所有节点,将父菜单id与传过来的id比较 if (!StringUtils.isEmpty(menu.getParentId().toString())) { if ((menu.getParentId() + "").equals(id)) { childList.add(menu); } } } // 把子菜单的子菜单再循环一遍 for (Menu menu : childList) {// 没有url子菜单还有子菜单 if (!StringUtils.isEmpty(menu.getParentId().toString())) { // 递归 List<Menu> childs = getChild(menu.getId().toString(), rootMenu); if (childs != null && childs.size() > 0) { menu.setList(childs); } } } // 递归退出条件 if (childList.size() == 0) { return null; } return childList; }
源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
本文作者:好Wu赖
本文链接:https://www.cnblogs.com/erlongxizhu-03/p/12367895.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现