package com.common.util; import cn.hutool.json.JSONUtil; import com.domain.vo.MenuVo; import java.util.ArrayList; import java.util.List; /** * 菜单递归工具类 * 悦享梦想 * 2021-07-02 */ public class MenuTreeUtil { public static List<MenuVo> getMenuTree(List<MenuVo> menuList, String rootId) { List<MenuVo> list = groupMenuList(menuList, rootId); return list; } //根据id和pId进行递归,此时适合list最顶级菜单的id和parentId相等的情况 private static List<MenuVo> groupMenuList(List<MenuVo> menuList, String pId) { List<MenuVo> iteratorMenuList = new ArrayList<>(); for (MenuVo m : menuList) { if("0".equals(pId)){ if (m.getParentId().equals(m.getId())) { List<MenuVo> childMenuList = groupMenuList(menuList, m.getId()); m.setChildren(childMenuList); iteratorMenuList.add(m); } }else{ if (m.getParentId().equals(pId) && !m.getParentId().equals(m.getId())) { List<MenuVo> childMenuList = groupMenuList(menuList, m.getId()); m.setChildren(childMenuList); iteratorMenuList.add(m); } } } return iteratorMenuList; } //根据id和pId进行递归,此时适合list的最顶级菜单父ID都为0的情况 private static List<MenuVo> groupMenuList(String pId, List<MenuVo> list) { List<MenuVo> iteratorMenuList = new ArrayList<>(); for (MenuVo m : list) { if (m.getParentId().equals(pId)) { List<MenuVo> childMenuList = groupMenuList(m.getId(), list); m.setChildren(childMenuList); iteratorMenuList.add(m); } } return iteratorMenuList; } public static void main(String[] args) { //构造三栋济南有1个子节点嵌套JSON MenuVo msd=new MenuVo(); msd.setId("1111"); msd.setTitle("广东省"); msd.setParentId("1111"); MenuVo jnd=new MenuVo(); jnd.setId("2222"); jnd.setTitle("深圳市"); jnd.setParentId("1111"); MenuVo qdd=new MenuVo(); qdd.setId("3333"); qdd.setTitle("东莞市"); qdd.setParentId("1111"); MenuVo s1nd=new MenuVo(); s1nd.setId("4444"); s1nd.setTitle("南山区"); s1nd.setParentId("2222"); MenuVo s2dd=new MenuVo(); s2dd.setId("5555"); s2dd.setTitle("南城区"); s2dd.setParentId("3333"); List<MenuVo> menuVoList = new ArrayList<>(); menuVoList.add(msd); menuVoList.add(jnd); menuVoList.add(qdd); menuVoList.add(s1nd); menuVoList.add(s2dd); //取层级关系 List<MenuVo> treeList=getMenuTree(menuVoList,"0"); System.out.println(JSONUtil.toJsonStr(treeList)); } }
例子运行结果:
[
{
"title":"广东省",
"parentId":"1111",
"children":[
{
"title":"深圳市",
"parentId":"1111",
"children":[
{
"title":"南山区",
"parentId":"2222",
"children":[
],
"id":"4444"
}
],
"id":"2222"
},
{
"title":"东莞市",
"parentId":"1111",
"children":[
{
"title":"南城区",
"parentId":"3333",
"children":[
],
"id":"5555"
}
],
"id":"3333"
}
],
"id":"1111"
}
]