Java树形结构中根据父类节点查找全部子类节点
上一篇文章介绍了两种树形结构数据整合json格式的方法,第一种方法中有根据父类获取全部子类的方法,这里单独拿出来再说一下。
仍然是利用递归来整合,代码如下:
//根据父节点获取全部子节点 public static List<TreeBuilder.Node> getChildren(Integer pid,List<TreeBuilder.Node> nodeList){ List<TreeBuilder.Node> resultList = new ArrayList<>(); if (null != nodeList && nodeList.size() > 0){ try{ for (TreeBuilder.Node layer : nodeList) { if(pid == layer.getParentId()){ //添加子级节点 resultList.add(layer); //递归获取深层节点 resultList.addAll(getChildren(layer.getId(),nodeList)); } } }catch (Exception e){ System.out.println(e); } } return resultList; }
看测试代码:
package com.johanChan.WebSocket.controller; import com.alibaba.fastjson.JSON; import com.johanChan.WebSocket.utils.BuildTree; import com.johanChan.WebSocket.utils.CommonUtils; import com.johanChan.WebSocket.utils.Tree; import com.johanChan.WebSocket.utils.TreeBuilder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller public class TreeController { List<TreeBuilder.Node> nodeList ; List<Tree<TreeBuilder.Node>> treeList; { nodeList = CommonUtils.buildNode(); treeList = CommonUtils.buildTree(); } @ResponseBody @RequestMapping("/getTreeJson") public String getTreeJson() { // List<TreeBuilder.Node> nodeList = CommonUtils.buildNode(); // String result = CommonUtils.buildTree(nodeList); List<Tree<TreeBuilder.Node>> resultList = BuildTree.build(treeList); String result = JSON.toJSONString(resultList); return result; } @ResponseBody @RequestMapping("/getChildren/{id}") public String getChildren(@PathVariable("id") Integer id) { // List<TreeBuilder.Node> nodeList = CommonUtils.buildNode(); List<TreeBuilder.Node> result = CommonUtils.getChildren(id,nodeList); // String jsonStr = JSON.toJSONString(result); String jsonStr = CommonUtils.buildTree(result); return jsonStr; } }
方法:getChildren/{id}就是了,启动项目看看效果:
数据整理一下:
[ { "children":[ { "code":"豫A-1", "id":15, "level":5, "name":"金水区", "parentId":11 } ], "code":"豫A", "id":11, "level":4, "name":"郑州", "parentId":7 }, { "code":"豫B", "id":12, "level":4, "name":"开封", "parentId":7 }, { "code":"豫C", "id":13, "level":4, "name":"洛阳", "parentId":7 }, { "code":"豫R", "id":14, "level":4, "name":"南阳", "parentId":7 } ]
已经得到了想要的数据,大家可以根据自己的需要修改一下就OK了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具