`
Franciswmf
  • 浏览: 797046 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java 递归 获取树形结构数据

 
阅读更多
	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递归算法构造JSON树形结构

    在 Java 中,使用递归算法可以将树形结构数据处理成 JSON 格式。在这个示例代码中,我们使用了 json-lib.jar 包将 List 序列化成 JSON。首先,我们需要定义一个 TreeBuilder 类,该类包含了构建树形结构的方法。 ...

    Java递归遍历树形结构

    总之,Java递归遍历树形结构是通过反复调用同一方法来处理树的不同部分,以构建或遍历层次数据。这种技术在处理菜单、文件系统、组织结构等场景中非常常见,因为它们都具有层次化的特性。理解和掌握递归遍历对于Java...

    jpa单表递归树形结构实现

    在本示例中,我们将探讨如何使用Spring JPA来实现单表递归树形结构。 首先,我们需要理解递归树形结构。在数据库中,树形结构通常通过自关联来表示,即一个表的某个字段引用该表自身,形成一个层级关系。对于单表...

    java动态树形菜单

    Servlet负责处理请求,可能包括从数据库或者其他数据源获取菜单数据,然后将这些数据组织成树形结构。接着,JSP页面接收Servlet传递的数据,并将其转换为HTML,呈现为树形菜单。 实现步骤如下: 1. **数据模型**:...

    java 实现动态改变树形结构中主节点的名称

    根据提供的文件信息,我们可以分析并总结出以下关于“Java实现动态改变树形结构中主节点的名称”的相关知识点: ### 一、理解树形结构 在计算机科学中,树形结构是一种常用的数据组织形式,它将数据组织成类似于树...

    树父节点递归获取树子节点

    总的来说,递归是处理树形结构数据的强大工具。在Java中,通过递归方法我们可以轻松地实现从父节点获取所有子节点的功能,这对于构建树形结构的应用程序(如文件系统、组织结构或菜单系统)非常有用。理解并掌握递归...

    java-根据过滤条件显示树形结构

    在Java编程中,根据过滤条件显示树形结构是一项常见的任务,尤其在数据管理、文件系统或者GUI应用中。树形结构是一种数据结构,它通过节点的层级关系来组织数据,通常用于表示具有层次性的信息。在这个场景下,我们...

    Oracle递归树形结构查询功能

    Oracle数据库在处理树形结构数据时提供了强大的递归查询功能,这种特性对于组织结构、产品分类、层级菜单等场景的应用非常广泛。递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的...

    SpringBoot + MyBatis Plus 递归获取树形菜单信息列表(附源码)

    在IT行业中,构建一个具有层次结构的树形菜单是...递归方法在此过程中扮演了关键角色,它帮助我们将数据库中的扁平数据转换为易于理解和操作的树形结构。这个过程不仅适用于菜单,也适用于其他需要展示层次关系的数据。

    使用递归和dom遍历dom树形结构

    ### 使用递归与DOM遍历DOM树形结构 在现代Web开发中,处理XML文档是一项常见任务。...本文将详细介绍如何通过递归来遍历DOM树形结构,...这种方法不仅适用于XML文档的解析,还可以应用于其他需要树形结构数据处理的场景。

    java、js中实现无限层级的树形结构方法(类似递归)

    在Java和JavaScript中,无限层级的树形结构是...总的来说,无论是Java还是JavaScript,实现无限层级的树形结构都涉及到数据的分组、遍历和递归操作。理解这些基本概念,可以帮助开发者有效地处理复杂的数据层次结构。

    获取树的下级所有和上级所有

    这个文件可能是关于如何实现这些查询的详细步骤、示例代码或者解释,包含了获取树形结构中下级和上级的所有信息。阅读这个文本文件将提供更具体的操作指南和可能的优化策略,比如性能提升技巧、处理大数据量时的注意...

    递归构建一整棵树

    递归构建树形结构数据是指使用递归方法生成树状的数据结构,常见于实现具有层级关系的菜单系统,例如无限层级菜单。递归方法通过函数自己调用自己的方式简化问题,使其在面对复杂层级结构时,能够逐层创建和构建出...

    在java中 遍历mysql中的树形结构

    在Java中遍历MySQL数据库中的树形结构是一项常见的任务,尤其是在处理组织结构、文件系统或任何具有层次关系的数据时。本文将深入探讨如何利用Java语言和MySQL数据库来实现这一功能,解析给定代码片段,并提供一种...

    java组装树形结构demo.7z

    在Java编程中,树形结构是一种常见的数据组织方式,它模拟了自然界中的树状关系,如文件系统、组织架构等。树形结构由节点(或称为对象)组成,每个节点可以有零个或多个子节点,形成层级关系。在本案例中,"java...

    无限级树(Java递归)

    通过上述分析,我们可以看到该无限级树形结构使用Java递归方式实现了动态构建树形结构的功能,并通过前端脚本实现了交互效果。虽然代码可能存在一定的优化空间,但对于理解和实现递归算法构建树形结构具有很好的参考...

    组织树递归获取

    ### 组织树递归获取知识点 #### 一、组织树机构数据递归概述 组织树机构数据递归是IT领域中一种常见的处理层级结构数据的方法。在本案例中,组织树机构数据递归主要用于后台开发,以便前端可以更方便地调用数据。 ...

    mybatis 父子级树形结构查询

    在MyBatis的映射XML文件中,`&lt;collection&gt;`标签用于表示一对多的关系,它允许我们在一次查询中获取到一个对象的所有子对象,从而构建出树形结构。例如,如果我们有一个`Department`实体类,其中包含一个`List...

    Java实现简单树结构

    在Java编程中,树是一种常见的数据结构,用于表示层次关系或组织复杂的数据。本篇将详细讲解如何使用Java实现一个简单的树结构,包括树节点类`treeNode`、树类`tree`以及相关的操作方法。 首先,我们来看`treeNode`...

    Android 树形结构开发demo,实现单选多选功能

    在Android应用开发中,树形结构的界面设计是一种常见的数据展示方式,特别是在处理层级关系复杂的数据时,如文件系统、组织架构等。本教程将详细讲解如何利用Android技术实现一个支持单选和多选功能的树形结构示例。...

Global site tag (gtag.js) - Google Analytics