private static void print2(){
List<Node> nullList=new ArrayList<Node>();
//镇
Node znode1=new Node("1000", "徐桥镇", "100", "1,10,100,", nullList, true, 4, 1);
Node znode2=new Node("1001", "兴昌镇", "100", "1,10,100,", nullList, true, 4, 2);
Node znode3=new Node("1002", "天桥镇", "100", "1,10,100,", nullList, true, 4, 3);
//县
Node xnode1=new Node("100", "太湖县", "10", "1,10,", nullList, false, 3, 1);
Node xnode2=new Node("101", "宿松县", "10", "1,10,", nullList, false, 3, 2);
Node xnode3=new Node("102", "望江县", "10", "1,10,", nullList, false, 3, 3);
//市
Node snode1=new Node("10", "安庆市", "1", "1,", nullList, false, 2, 1);
Node snode2=new Node("11", "合肥市", "1", "1,", nullList, false, 2, 1);
Node snode3=new Node("12", "黄山市", "1", "1,", nullList, false, 2, 1);
//省
Node wnode1=new Node("1", "安徽省", "", "", nullList, false, 1, 1);
List<Node> list=new ArrayList<Node>();
list.add(wnode1);
list.add(xnode1);
list.add(xnode2);
list.add(xnode3);
list.add(snode1);
list.add(snode2);
list.add(snode3);
list.add(znode1);
list.add(znode2);
list.add(znode3);
//
Node node=TreeUtils.buildTree("1", list);//方法一
System.out.println("结果:\n"+node.toString());
// Node node2=TreeUtils.buildTreeNode("1", list);//方法二
// System.out.println("结果:\n"+node2.toString());
}
测试结果:
{"children":[{"children":[{"children":[{"children":[],"id":"1000","isLeaf":true,"level":4,"name":"徐桥镇","parentId":"100","parentIds":"1,10,100,","sort":1},{"children":[],"id":"1001","isLeaf":true,"level":4,"name":"兴昌镇","parentId":"100","parentIds":"1,10,100,","sort":2},{"children":[],"id":"1002","isLeaf":true,"level":4,"name":"天桥镇","parentId":"100","parentIds":"1,10,100,","sort":3}],"id":"100","isLeaf":false,"level":3,"name":"太湖县","parentId":"10","parentIds":"1,10,","sort":1},{"children":[],"id":"101","isLeaf":false,"level":3,"name":"宿松县","parentId":"10","parentIds":"1,10,","sort":2},{"children":[],"id":"102","isLeaf":false,"level":3,"name":"望江县","parentId":"10","parentIds":"1,10,","sort":3}],"id":"10","isLeaf":false,"level":2,"name":"安庆市","parentId":"1","parentIds":"1,","sort":1},{"children":[],"id":"11","isLeaf":false,"level":2,"name":"合肥市","parentId":"1","parentIds":"1,","sort":1},{"children":[],"id":"12","isLeaf":false,"level":2,"name":"黄山市","parentId":"1","parentIds":"1,","sort":1}],"id":"1","isLeaf":false,"level":1,"name":"安徽省","parentId":"","parentIds":"","sort":1}
public class Node {
/**
* id
*/
private String id;
/**
* 名称
*/
private String name;
/**
* 父节点
*/
private String parentId;
/**
* 所有的父节点
*/
private String parentIds;
/**
* 子节点
*/
private List<Node> children;
/**
* 是否叶子节点
*/
private Boolean isLeaf;
/**
* 级别
*/
private Integer level;
/**
* 序号
*/
private Integer sort;
public Node() {
super();
}
public Node(String id, String name, String parentId, String parentIds, List<Node> children, Boolean isLeaf,
Integer level, Integer sort) {
super();
this.id = id;
this.name = name;
this.parentId = parentId;
this.parentIds = parentIds;
this.children = children;
this.isLeaf = isLeaf;
this.level = level;
this.sort = sort;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getParentIds() {
return parentIds;
}
public void setParentIds(String parentIds) {
this.parentIds = parentIds;
}
public List<Node> getChildren() {
return children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
public Boolean getIsLeaf() {
return isLeaf;
}
public void setIsLeaf(Boolean isLeaf) {
this.isLeaf = isLeaf;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
package com.test.tree;
import java.util.ArrayList;
import java.util.List;
public class TreeUtils {
/*
* =============================================方法一===================================================================
*/
/**
* 获取树型结构数据(方法一)
* @param rootId 根节点id
* @param srcList 源list
* @return
*/
public static Node buildTree(String rootId, List<Node> srcList){
Node rootNode=getNodeById(rootId, srcList);
List<Node> children=buildChildren(rootNode.getId(), srcList);
rootNode.setChildren(children);
return rootNode;
}
/**
* 根据父节点递归获取子节点(方法一)
* @param parentId 父节点id
* @param srcList 源list
* @return
*/
public static List<Node> buildChildren(String parentId, List<Node> srcList){
//parentId对应的子节点集合
List<Node> children=new ArrayList<Node>();
for (Node node : srcList) {
if(node.getParentId().equals(parentId)){
//装载parentId对应的子节点,属于二级节点
children.add(node);
}
}
if(!children.isEmpty()){
//进一步递归获取子节点集合的子节点
for (Node nod : children) {
List<Node> childs=new ArrayList<Node>();
if(!nod.getIsLeaf()){
//不是叶子节点,则该node应该还有子节点(不一定有)
childs=buildChildren(nod.getId(), srcList);
}
nod.setChildren(childs);
}
}
return children;
}
/*
* =============================================方法二===================================================================
*/
/**
* 递归获取树型结构数据(方法二)
* @param parentId 父节点id
* @param srcList 源list
* @return
*/
public static Node buildTreeNode(String parentId, List<Node> srcList){
//父节点
Node node=getNodeById(parentId, srcList);
List<Node> children=getChildrenNodeById(parentId, srcList);
if(children.isEmpty()){
node.setChildren(children);
}else{
List<Node> children2=new ArrayList<Node>();
for (Node temp : children) {
//递归
Node child=buildTreeNode(temp.getId(), srcList);
children2.add(child);
}
node.setChildren(children2);
}
return node;
}
/**
* 根据节点id获取子节点(方法二)
* @param parentId
* @param srcList
* @return
*/
public static List<Node> getChildrenNodeById(String parentId, List<Node> srcList){
List<Node> children=new ArrayList<Node>();
for (Node node : srcList) {
if(node.getParentId().equals(parentId)){
//装载parentId对应的子节点
children.add(node);
}
}
return children;
}
/**
* 获取节点(公共)
* @param nodeId 根节点id
* @param srcList 源list
* @return
*/
private static Node getNodeById(String nodeId, List<Node> srcList){
for (Node node : srcList) {
if(nodeId.equals(node.getId())){
return node;
}
}
return null;
}
}
分享到:
相关推荐
此java类实现了对数据表的分类递归树的实现,为本人倾力之作,后期,会发布js版,敬请期待!
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
数据的获取和处理:在JSP页面中,需要通过SQL查询语句来获取数据库中的所有节点数据,并将其按照树形结构进行整理和排序。这样就可以在页面上展示出完整的导航树。 样式和交互设计:为了让用户更方便地浏览和访问...
墨水打印Java中的数据结构 用Java实现数据结构和算法 动态数组实现 帕斯卡三角形的实现(锯齿状数组) 打印所有素数直到给定 n。 定理:假设所有数字都是素数,直到被证明为假。 单链表 标准单向链表:push/pop ...
Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
修改扩展界面支持库一,为“树形框”增加多态检查框功能,相应地添加了多个与检查框相关的属性、方法和事件。 17. 修改高级表格支持库,允许“复制选定文本()”“剪切选定文本()”在“允许选择块”属性为假时复制...
对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览...
这些指令显然是分支指令,作用类似于Java的switch语句,switch指令的语法结构如下: <#case refValue>... <#case refValue>... <#default>... 3、 list, break指令 list指令是一个迭代输出指令,用于迭代输出...