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了。
Java树形结构中根据父类节点查找全部子类节点的更多相关文章
- JS 树形结构与数组结构相互转换、在树形结构中查找对象
总是有很多需求是关于处理树形结构的,所以不得不总结几个常见操作的写法.¯\_(ツ)_/¯ 首先假设有一个树形结构数据如下 var tree=[ { 'id': '1', 'name': '教学素材管理 ...
- 使用递归算法结合数据库解析成java树形结构
使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...
- java树形菜单实现
java树形菜单实现 公司表: 部门表: 实体类: public class Node { private Integer companyId;//公司id private String compan ...
- Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath
转: Dom4j 操作, 节点查找 添加 删除 修改 ...xPath 2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多 个人分类: JavaWeb 版权声明:本文为博 ...
- Java实现二叉排序树的插入、查找、删除
import java.util.Random; /** * 二叉排序树(又称二叉查找树) * (1)能够是一颗空树 * (2)若左子树不空,则左子树上全部的结点的值均小于她的根节点的值 * (3)若 ...
- Java里面,反射父类里面数字类型字段,怎么set值
Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样: /** * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter * @aut ...
- Java笔记7-多态父类静态
多态的应用-面向父类编程 1.对象的编译时类型写成父类 2.方法的返回类型写成父类 3.方法的参数类型写成父类 编译时类型:对象的声明时类型,在于编译期间 运行时类型:new运算符后面的类型 编译时类 ...
- Java 用自带dom解析器遍历叶子节点内容
一.XML文件config.xml,内容如下: <?xml version="1.0" encoding="UTF-8" standalone=" ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...
随机推荐
- Aliyun Linux2安装Docker
安装教程 使用手册
- Spring集成Quartz定时任务
1.导入jar包 2.配置applicationContext.xml文件 <!-- 任务调度1 --> <!-- bean id="simpleJob" cla ...
- Redis系列(九):Redis的事务机制
提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务 ...
- JVM详解之:HotSpot VM中的Intrinsic methods
目录 简介 什么是Intrinsic Methods 内置方法的特点 多样性 兼容性 java语义的扩展 Hotspot VM中的内置方法 intrinsic方法和内联方法 intrinsic方法的实 ...
- PHP date_sunrise() 函数
------------恢复内容开始------------ 实例 返回葡萄牙里斯本今天的日出时间: <?php// Lisbon, Portugal:// Latitude: 38.4 Nor ...
- CF724C Ray Tracing 扩展欧几里得 平面展开
LINK:Ray Tracing 虚这道题很久了 模拟赛考了一个加强版的 瞬间就想到了这道简化版的. 考虑做法 暴力模拟可能可以 官方正解好像就是这个. 不过遇到这种平面问题可以考虑把平面给无限的展开 ...
- IDEA查看项目日志Version Control、log
打开IDEA找到以下两处: 右下角git 黄色指针指向当前项目的版本 选中初始化项目,点击右键选择"Checkout Revision 1db2f3d5",如下图 ...
- scala---lazy
scala中用lazy定义的变量叫做惰性变量,会实现延迟加载.惰性变量只能是不可变的变量.并且只有在调用惰性变量的时候才会被初始化. class Test1 { } object Test1 { de ...
- SSH整合-hibernate
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property& ...
- C语言学习笔记之进制之间的转换
这一篇主要是对进制之间转换的讲解,方便查看,以防忘记 二进制 逢二进一 八进制 逢八进一 以0开头, 0就是8进制的标志 十进制 逢十进一 ...