1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | package com.zl; import java.util.ArrayList; import java.util.List; public class MenuItem { private String id; private String pid; private String name; private List<MenuItem> childMenuItemList; public List<MenuItem> getChildMenuItemList() { return childMenuItemList; } public void setChildMenuItemList(List<MenuItem> childMenuItemList) { this .childMenuItemList = childMenuItemList; } public String getId() { return id; } public void setId(String id) { this .id = id; } public String getPid() { return pid; } public void setPid(String pid) { this .pid = pid; } public String getName() { return name; } public void setName(String name) { this .name = name; } @Override public String toString() { return "MenuItem{" + "id='" + id + '\ '' + ", pid='" + pid + '\ '' + ", name='" + name + '\ '' + ", childMenuItemList=" + childMenuItemList + '}' ; } } |
package com.zl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Hello world! */ public class App { /** * 把 list 转化成 tree 的形式 * 核心是 对象都是引用的,对象间引用添加关联 * @param itemList */ public static Map<String, MenuItem> listToTree(List<MenuItem> itemList) { //存放树结构的map,返回数据 HashMap<String, MenuItem> resultMap = new HashMap<>(); //map初始化 key为id,value为对象,方便根据id直接获取对象 HashMap<String, MenuItem> menuItemHashMap = new HashMap<>(); for (MenuItem menuItem : itemList) { menuItemHashMap.put(menuItem.getId(), menuItem); } for (MenuItem menuItem : itemList) { String pid = menuItem.getPid(); if (pid != null && pid != "") { MenuItem parentMenuItem = menuItemHashMap.get(pid); //有父节点的把当前节点挂在父节点上,没有父节点的说明当前节点就是根节点 if (null != parentMenuItem) { List<MenuItem> childMenuItemList = parentMenuItem.getChildMenuItemList(); if (null != childMenuItemList) { childMenuItemList.add(menuItem); } else { childMenuItemList = new ArrayList<>(); parentMenuItem.setChildMenuItemList(childMenuItemList); childMenuItemList.add(menuItem); } }else { //没有找到父节点说明当前节点是根节点,放到返回的map中 resultMap.put(menuItem.getId(),menuItem); } }else { //没有找到父节点说明当前节点是根节点,放到返回的map中 resultMap.put(menuItem.getId(),menuItem); } } System.out.println(resultMap); return resultMap; } public static void main(String[] args) { ArrayList<MenuItem> menuItemArrayList = new ArrayList<>(); MenuItem menuItem = new MenuItem(); MenuItem menuItem2 = new MenuItem(); MenuItem menuItem3 = new MenuItem(); MenuItem menuItem4 = new MenuItem(); MenuItem menuItem5 = new MenuItem(); MenuItem menuItem6 = new MenuItem(); MenuItem menuItem7 = new MenuItem(); MenuItem menuItem8 = new MenuItem(); menuItemArrayList.add(menuItem); menuItemArrayList.add(menuItem2); menuItemArrayList.add(menuItem3); menuItemArrayList.add(menuItem4); menuItemArrayList.add(menuItem5); menuItemArrayList.add(menuItem6); menuItemArrayList.add(menuItem7); menuItemArrayList.add(menuItem8); menuItem.setId("1"); menuItem.setPid("0"); menuItem.setName("1"); menuItem2.setId("2"); menuItem2.setPid("0"); menuItem2.setName("2"); menuItem3.setId("3"); menuItem3.setPid("2"); menuItem3.setName("2.1"); menuItem4.setId("4"); menuItem4.setPid("0"); menuItem4.setName("4"); menuItem5.setId("5"); menuItem5.setPid("4"); menuItem5.setName("4.1"); menuItem6.setId("6"); menuItem6.setPid("5"); menuItem6.setName("4.1.1"); menuItem7.setId("7"); menuItem7.setPid("6"); menuItem7.setName("4.1.1.1"); menuItem8.setId("8"); menuItem8.setPid("6"); menuItem8.setName("4.1.1.2"); listToTree(menuItemArrayList); } }
【推荐】AI 的力量,开发者的翅膀:欢迎使用 AI 原生开发工具 TRAE
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何正确实现一个 BackgroundService
· 抽象与性能:从 LINQ 看现代 .NET 的优化之道
· AI 时代,为什么我们还有必要写博客?
· 行业思考:不是前端不行,是只会前端不行
· C#高级GDI+实战:从零开发一个流程图
· 被 DDoS 攻击的一夜
· 一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
· 仅一个 Python 文件,狂揽近 2 万 Star「GitHub 热点速览」
· 上周热点回顾(7.28-8.3)
· 架构师必备:实时对账与离线对账