java 实现平层数组转换为层级对象

sql

insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0);
insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);
insert into tb_tree (CID, CNAME, PID) values (3, '广东省', 1);
insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);
insert into tb_tree (CID, CNAME, PID) values (5, '广州市', 3);
insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);
insert into tb_tree (CID, CNAME, PID) values (7, '海珠区', 5);
insert into tb_tree (CID, CNAME, PID) values (8, '天河区', 5);
insert into tb_tree (CID, CNAME, PID) values (9, '福田区', 6);
insert into tb_tree (CID, CNAME, PID) values (10, '南山区', 6);
insert into tb_tree (CID, CNAME, PID) values (11, '密云县', 2);
insert into tb_tree (CID, CNAME, PID) values (12, '浦东', 4);

RecursiveTest 递归实现

package recursive;

import me.shib.java.lib.utils.JsonUtil;

import java.util.List;


public class RecursiveTest {

    public static void main(String[] args) {
        JsonUtil jsonUtil = new JsonUtil();
        RecursiveTest recursive = new RecursiveTest();
        jsonUtil.toJson(recursive.recursiveTree(1));

    }

    /**
     * 递归算法解析成树形结构
     *
     * @param cid
     * @return
     * @author jiqinlin
     */
    public TreeNode recursiveTree(int cid) {
        //根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)
        TreeNode node = personService.getreeNode(cid);
        //查询cid下的所有子节点(SELECT * FROM tb_tree t WHERE t.pid=?)
        List<TreeNode> childTreeNodes =personService.queryTreeNode(cid);
        //遍历子节点
        for (TreeNode child : childTreeNodes) {
            TreeNode n = recursiveTree(child.getCid()); //递归
            node.getNodes().add(n);
        }

//        return node;
        return node;
    }
}

树的结点类

package recursive;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class TreeNode implements Serializable {

    private Integer cid;
    private String cname;
    private Integer pid;
    private List nodes = new ArrayList();

    public TreeNode() {
    }

    public Integer getCid() {
        return cid;
    }

    public String getCname() {
        return cname;
    }

    public Integer getPid() {
        return pid;
    }

    public List getNodes() {
        return nodes;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public void setNodes(List nodes) {
        this.nodes = nodes;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统进阶

Influxdb中Select查询请求结果涉及到的一些数据结构

相当于c里面的链表元素,itr指向下一个元素的指针,buf表示当前元素,即FloatPoint类型的链表的迭代器.

18320
来自专栏码匠的流水账

聊聊pg jdbc的queryTimeout及next方法

本文主要介绍一下pg jdbc statement的queryTimeout及resultSet的next方法

39010
来自专栏拂晓风起

cocos2d-js Shader系列4:Shader、GLProgram在jsb(native、手机)和html5之间的兼容问题。cocos2d-js框架各种坑。

22640
来自专栏码匠的流水账

聊聊rocketmq的PushConsumerImpl

io/openmessaging/rocketmq/consumer/PushConsumerImpl.java

20020
来自专栏公众号_薛勤的博客

任务调度工具Quartz入门笔记

1)官网下载:http://www.quartz-scheduler.org/downloads/ 2)Maven

7630
来自专栏跟着阿笨一起玩NET

ASP.NET 存储过程操作

存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。存储过程在第一应用程序执行时进行语法检查和编...

16010
来自专栏逆向与安全

nProtect APPGuard安卓反外挂分析

1.最近在学习手游保护方面的技术,本文是学习过程中分析某反外挂的一点记录,高手莫要见笑,有不对的地方还请指教,首先简单通过资源目录中文件名做基本了解,

49400
来自专栏函数式编程语言及工具

FunDA(2)- Streaming Data Operation:流式数据操作

   在上一集的讨论里我们介绍并实现了强类型返回结果行。使用强类型主要的目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便、准确、...

22460
来自专栏码匠的流水账

聊聊HystrixEventNotifier

hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/strategy/eventnotifier/Hyst...

12820
来自专栏函数式编程语言及工具

Akka(8): 分布式运算:Remoting-远程查找式

  Akka是一种消息驱动运算模式,它实现跨JVM程序运算的方式是通过能跨JVM的消息系统来调动分布在不同JVM上ActorSystem中的Actor进行运算,...

44890

扫码关注云+社区

领取腾讯云代金券