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了。

 

posted @   胜金  阅读(7640)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示