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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM