话不多说 ,直接上代码,其中代码有参考网上其他 码友 的,具体那个帖子记不清了 ,把代码写在这 做一个记录 package cn.togeek.entity.tree; import cn.togeek.entity.Permission; import io.micrometer.core.instrument.util.StringUtils; import java.util.ArrayList; import java.util.List; /** * @author liuhongchun * @date 2019/11/27 10:56 */ public class TreePermission { //传入数据源 public static List<Permission> getTree(List<Permission> list) { // 查看结果 for (Permission menu : list) { // System.out.println(menu); } // 最后的结果 List<Permission> menuList = new ArrayList<Permission>(); // 先找到所有的一级菜单 for (int i = 0; i < list.size(); i++) { // 一级菜单没有parentId // 这里 的 ParentId 是String 类型的 ,要是其类型的,记得转换 if (StringUtils.isBlank(list.get(i).getParentId())) { menuList.add(list.get(i)); } } // 为一级菜单设置子菜单,getChild是递归调用的 for (Permission menu : menuList) { //这里的PId 就是id,如果 你是id ,可以改为id menu.setChilds(getChild(String.valueOf(menu.getPId()), list)); } return menuList; } private static List<Permission> getChild(String id, List<Permission> rootMenu) { // 子菜单 List<Permission> childList = new ArrayList<>(); for (Permission menu : rootMenu) { // 遍历所有节点,将父菜单id与传过来的id比较 //parentid 为string 类型 if (StringUtils.isNotBlank(menu.getParentId())) { if (menu.getParentId().equals(id)) { childList.add(menu); } } } // 把子菜单的子菜单再循环一遍 for (Permission menu : childList) {// 没有url子菜单还有子菜单 if (StringUtils.isBlank(menu.getUrl())) { // 递归 PId=id menu.setChilds(getChild(String.valueOf(menu.getPId()), rootMenu)); } } // 递归退出条件 if (childList.size() == 0) { return null; } return childList; } }
java 对菜单父子关系 进行遍历
最新推荐文章于 2023-02-13 14:52:57 发布