第一步、模拟查看数据库所有数据到List里面
| |
| |
| |
| |
| |
| |
| @Data |
| @Builder |
| public class Menu { |
| |
| |
| |
| public Integer id; |
| |
| |
| |
| public String name; |
| |
| |
| |
| public Integer parentId; |
| |
| |
| |
| public List<Menu> childList; |
| |
| |
| public Menu(Integer id, String name, Integer parentId) { |
| this.id = id; |
| this.name = name; |
| this.parentId = parentId; |
| } |
| |
| public Menu(Integer id, String name, Integer parentId, List<Menu> childList) { |
| this.id = id; |
| this.name = name; |
| this.parentId = parentId; |
| this.childList = childList; |
| } |
| |
| } |
第二步、递归组装树形结构
| @Test |
| public void testtree(){ |
| |
| List<Menu> menus = Arrays.asList( |
| new Menu(1,"根节点",0), |
| new Menu(2,"子节点1",1), |
| new Menu(3,"子节点1.1",2), |
| new Menu(4,"子节点1.2",2), |
| new Menu(5,"根节点1.3",2), |
| new Menu(6,"根节点2",1), |
| new Menu(7,"根节点2.1",6), |
| new Menu(8,"根节点2.2",6), |
| new Menu(9,"根节点2.2.1",7), |
| new Menu(10,"根节点2.2.2",7), |
| new Menu(11,"根节点3",1), |
| new Menu(12,"根节点3.1",11) |
| ); |
| |
| |
| List<Menu> collect = menus.stream().filter(m -> m.getParentId() == 0).map( |
| (m) -> { |
| m.setChildList(getChildrens(m, menus)); |
| return m; |
| } |
| ).collect(Collectors.toList()); |
| System.out.println("-------转json输出结果-------"); |
| System.out.println(JSON.toJSON(collect)); |
| } |
| |
| |
| |
| |
| |
| |
| |
| private List<Menu> getChildrens(Menu root, List<Menu> all) { |
| List<Menu> children = all.stream().filter(m -> { |
| return Objects.equals(m.getParentId(), root.getId()); |
| }).map( |
| (m) -> { |
| m.setChildList(getChildrens(m, all)); |
| return m; |
| } |
| ).collect(Collectors.toList()); |
| return children; |
| } |

关注我的公众号SpaceObj 领取idea系列激活码

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)