`
shangwangwuzui1988
  • 浏览: 11619 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

递归树

    博客分类:
 
阅读更多
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class Test {

	public static void main(String[] args) {
		List<Sys_privilege> list = loadingList();
		List<Sys_privilege> newList = refactorPriviList(list);
		JSONArray jsonArray = new JSONArray();
		for (Sys_privilege sp : newList) {
			JSONObject jObject = new JSONObject();
			jObject.put("id", sp.getId());
			jObject.put("name", sp.getName());
			jObject.put("subList", convertToJson(sp));

			jsonArray.add(jObject);
		}
		System.out.println(jsonArray.toString());
	}
	
	public static String convertToJson(Sys_privilege privi){
		JSONArray jArray = new JSONArray();
		for(Sys_privilege sp : privi.getSubPriviList()) {
			JSONObject jObject = new JSONObject();
			jObject.put("id", sp.getId());
			jObject.put("name", sp.getName());
			jObject.put("subList", convertToJson(sp));
			jArray.add(jObject);
		}
		return jArray.toString();
	}
	
	public static List<Sys_privilege> refactorPriviList(List<Sys_privilege> list){
		if(null == list || list.size() == 0) return null;
		Sys_privilege parent = new Sys_privilege();
		parent.setParentId(0);
		List<Sys_privilege> subList = getPrivilegeByParentId(parent,list);
		for (Sys_privilege privilege : subList) {
			if(0==privilege.getParentId()){
				getChildPrivilege(privilege,list);
			}
		}
		return subList;
	}
	
	/***
	 * 递归获取子权限
	 * @param privi
	 * @param list
	 */
	public static void getChildPrivilege(Sys_privilege privi,List<Sys_privilege> list){
		List<Sys_privilege> subList = getPrivilegeByParentId(privi,list);
		if(null != subList && subList.size() > 0){
			for (Sys_privilege subPrivi : subList) {
				getChildPrivilege(subPrivi,list);
			}
		}
		privi.setSubPriviList(subList);
	}
	
	/***
	 * 从权限列表中获取指定parentId的权限
	 * @param priv
	 * @param list
	 * @return
	 */
	private static List<Sys_privilege> getPrivilegeByParentId(Sys_privilege priv,List<Sys_privilege> list){
		if(null == list || list.size() == 0) return null;
		List<Sys_privilege> newList = new ArrayList<Sys_privilege>();
		for (Sys_privilege sys_privilege : list) {
			if(sys_privilege.getParentId().equals(priv.getId())){
				newList.add(sys_privilege);
			}
		}
		return newList;
	}
	
	public static List<Sys_privilege> loadingList(){
		List<Sys_privilege> list = new ArrayList<Sys_privilege>();
		
		Sys_privilege p = new Sys_privilege();
		p.setId(1);
		p.setName("1");
		p.setParentId(0);
		
		Sys_privilege p2 = new Sys_privilege();
		p2.setId(2);
		p2.setName("2");
		p2.setParentId(0);
		
		Sys_privilege p3 = new Sys_privilege();
		p3.setId(3);
		p3.setName("3");
		p3.setParentId(0);
		
		
		Sys_privilege p4 = new Sys_privilege();
		p4.setId(4);
		p4.setName("1.1");
		p4.setParentId(1);
		
		Sys_privilege p5 = new Sys_privilege();
		p5.setId(5);
		p5.setName("1.2");
		p5.setParentId(1);
		
		Sys_privilege p6 = new Sys_privilege();
		p6.setId(6);
		p6.setName("1.1.1");
		p6.setParentId(4);
		
		list.add(p);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		list.add(p5);
		list.add(p6);
		
		return list;
	}
}

 

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

public class Sys_privilege implements Serializable {
	
	private static final long serialVersionUID = 1L;
	/**权限状态:正常*/
	public static final int PRIVILEGE_STATUS_NORMAL = 0; 
	/**权限状态:停用*/
	public static final int PRIVILEGE_STATUS_DISABLE = 1;
	/**权限类型:菜单类型*/
	public static final String PRIVILEGE_TYPE_MENU = "0";
	/**权限类型:按钮类型*/
	public static final String PRIVILEGE_TYPE_BUTTON = "1";
	
	private int id;//
	private String name;//权限名称
	private String action;//对应action
	private Integer parentId;//父权限
	private Integer status;//权限状态: 0.正常 1.停用
	private String type;//权限类型: 0.菜单类型 1. 按钮类型 2...
	private List<Sys_privilege> subPriviList = new ArrayList<Sys_privilege>();//子权限

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAction() {
		return action;
	}
	public void setAction(String action) {
		this.action = action;
	}
	public Integer getParentId() {
		return parentId;
	}
	public void setParentId(Integer parentId) {
		this.parentId = parentId;
	}
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public Set<Sys_role> getRoles() {
		return roles;
	}
	public void setRoles(Set<Sys_role> roles) {
		this.roles = roles;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getQueryIds() {
		return queryIds;
	}
	public void setQueryIds(String queryIds) {
		this.queryIds = queryIds;
	}
	public List<Sys_privilege> getSubPriviList() {
		return subPriviList;
	}
	public void setSubPriviList(List<Sys_privilege> subPriviList) {
		this.subPriviList = subPriviList;
	}
	public String toString(){
		return "[id=" + id + ",name=" + name + ",status="
			+ status + "type=" + type + ",parentId=" + parentId + ",action=" + action + "]";
	}

}

 

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class Test2 {

	public static void main(String[] args) {
		List<Sys_privilege> list = loadingList();
		List<Sys_privilege> newList = refactorPriviList(list);
		System.out.println(newList.size());
	}
	
	public static List<Sys_privilege> refactorPriviList(List<Sys_privilege> list){
		if(null == list || list.size() == 0) return null;
		Sys_privilege parent = new Sys_privilege();
		parent.setParentId(0);
		List<Sys_privilege> newList = new ArrayList<Sys_privilege>();
		List<Sys_privilege> subList = getPrivilegeByParentId(parent,list);
		for (Sys_privilege privilege : subList) {
			if(0==privilege.getParentId()){
				getChildPrivilege(privilege,list,newList);
			}
		}
		newList.addAll(subList);
		return newList;
	}
	
	/***
	 * 递归获取子权限
	 * @param privi
	 * @param list
	 */
	public static void getChildPrivilege(Sys_privilege privi,List<Sys_privilege> list,
			List<Sys_privilege> newList){
		List<Sys_privilege> subList = getPrivilegeByParentId(privi,list);
		if(null != subList && subList.size() > 0){
			for (Sys_privilege subPrivi : subList) {
				getChildPrivilege(subPrivi,list,newList);
			}
		}
		newList.addAll(subList);
	}
	
	/***
	 * 从权限列表中获取指定parentId的权限
	 * @param priv
	 * @param list
	 * @return
	 */
	private static List<Sys_privilege> getPrivilegeByParentId(Sys_privilege priv,List<Sys_privilege> list){
		if(null == list || list.size() == 0) return null;
		List<Sys_privilege> newList = new ArrayList<Sys_privilege>();
		for (Sys_privilege sys_privilege : list) {
			if(sys_privilege.getParentId().equals(priv.getId())){
				newList.add(sys_privilege);
			}
		}
		return newList;
	}
	
	public static List<Sys_privilege> loadingList(){
		List<Sys_privilege> list = new ArrayList<Sys_privilege>();
		
		Sys_privilege p = new Sys_privilege();
		p.setId(1);
		p.setName("1");
		p.setParentId(0);
		
		Sys_privilege p2 = new Sys_privilege();
		p2.setId(2);
		p2.setName("2");
		p2.setParentId(0);
		
		Sys_privilege p3 = new Sys_privilege();
		p3.setId(3);
		p3.setName("3");
		p3.setParentId(0);
		
		
		Sys_privilege p4 = new Sys_privilege();
		p4.setId(4);
		p4.setName("1.1");
		p4.setParentId(1);
		
		Sys_privilege p5 = new Sys_privilege();
		p5.setId(5);
		p5.setName("1.2");
		p5.setParentId(1);
		
		Sys_privilege p6 = new Sys_privilege();
		p6.setId(6);
		p6.setName("1.1.1");
		p6.setParentId(4);
		
		list.add(p);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		list.add(p5);
		list.add(p6);
		
		return list;
	}
}

 

 

分享到:
评论

相关推荐

    c#递归树自动树

    根据给定的信息,本文将详细解释C#中的递归树构建方法,并重点解析如何通过递归函数实现自动化的树形结构构建,包括添加父子节点等操作。 ### 一、递归树的概念 在计算机科学中,树是一种常用的数据结构,它由节点...

    递归树, 真的是画一棵树.

    递归树是递归算法的一种可视化表现形式,它能帮助我们理解递归过程,尤其是对于那些涉及到分治策略的问题,如分形几何、搜索算法(如深度优先搜索DFS)和排序算法(如快速排序、归并排序)等。 递归树的绘制通常是...

    jpa单表递归树形结构实现

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

    奉献一个c#绝好的递归树实例

    在这个“c#绝好的递归树实例”中,我们将深入探讨递归的概念,以及如何在WinForm和ASP.NET项目中应用它。 首先,理解递归的基本概念至关重要。递归是指函数或方法调用自身的过程,通常用于解决分治问题,如遍历树形...

    Oracle递归树形结构查询功能

    递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的层级查询,以展示数据的层次关系。 在Oracle中,树形结构查询的基本语法如下: ```sql SELECT [LEVEL], * FROM table_name START ...

    java无限递归树+struts2

    Java无限递归树是一种在Java编程中用于表示层级关系数据结构的技术,通常在构建复杂的UI,如文件系统、组织架构或者数据库表的层次结构时使用。这种树结构能够无限制地自我扩展,允许节点拥有任意数量的子节点,从而...

    27丨递归树:如何借助树来求解递归算法的时间复杂度?1

    递归树是一种用于分析递归算法时间复杂度的可视化工具,尤其在处理复杂递归关系时,能够简化问题的理解和计算。在递归算法中,我们通常将大问题分解为小问题来解决,这个过程可以抽象成一棵树的结构,即递归树。 ...

    JAVA_SQL递归树形

    JAVA_SQL递归树形,用递归算法结合数据库对J2EE实现树结构

    随机递归树的Zagreb指数

    随机递归树是一种数学模型,用于描述树状结构的数据或者自然现象,比如某些类型的社会网络、生物的分支结构等。在随机递归树模型中,从一个单一的节点出发,不断地随机添加新的节点,并为新加入的节点随机选择一个已...

    .net ,递归写自定义树

    总结来说,构建.NET递归树的关键在于理解递归的概念,以及如何在后台生成树形数据结构,并将其转换为前端可以处理的格式。同时,前端使用合适的jQuery控件,如`jstree`,将数据转化为用户友好的可视化界面。通过这种...

    基于递归树解析方法的翻译系统设计.zip

    本次课设思路清晰, 构建了基于位置优先的多层次分治算法模型, 对Markdown语法转换成HTML格式较鲁棒, 特别对嵌套的子列表采用了递归树解析的方法, 此外本课设不仅完成了PDF上的基本需求, 还进行了全面的拓展, 比如...

    树的基本操作及递归树存取数据库及RzCheckTree转换为RzTreeView及cxgridband

    2. **递归树存取数据库**: - 在数据库中存储树结构时,通常使用自连接表或者层级编码(如MPTT,Materialized Path Tree)来表示树关系。 - **递归查询**:通过递归SQL查询或编程语言中的递归函数来处理树数据,如...

    分形递归树的森林景观实时模拟方法

    ### 分形递归树的森林景观实时模拟方法 #### 一、引言 随着计算机图形学的发展,如何高效地模拟大规模自然场景成为了该领域的重要课题之一。这些场景不仅包括简单的地形地貌,更涉及复杂的森林景观。森林景观由...

    Java中的无限层级递归树前后端操作解决方案.docx

    Java 中的无限层级递归树前后端操作解决方案 在本解决方案中,我们将探讨 Java 中的无限层级递归树前后端操作解决方案,解决方案涵盖前端 Vue 无限层级树实现技术大纲、Java 无限递归层级树方案、前端数据结构、...

    递归画树(Qt实现)

    这个过程不仅展示了递归算法在处理树结构的强大能力,还体现了Qt在图形绘制方面的灵活性。通过适当调整节点间的距离、旋转角度或其他视觉效果,我们可以定制出更加美观和易于理解的树状图。在实际应用中,这种技术...

    c#+递归树结构+递归树+通过递归函数构建树形结构

    读取数据库树形数据使用递归函数构造树+C#+数据库&C#构造树

    用递归实现C#树形结构

    本篇将详细探讨如何使用递归方法来实现C#中的树形结构。 首先,理解树形结构的基本概念至关重要。在计算机科学中,树是由节点(也称为顶点)和边组成的非线性数据结构。每个节点可以有零个或多个子节点,而顶部的...

    确定性均匀递归树的谱分析

    确定性均匀递归树的网络性质的研究已经有了大量的结果。关于确定性均匀递归树的谱的研究,章忠志等也提出了其拉普拉斯矩阵特征值的迭代关系。基于这个结果,我们又提出了推广的拉普拉斯矩阵,通过对其特征值进行分析...

    数据库设计之递归树查询

    `WITH`语句配合递归选项,可以实现递归查询,非常适合处理树形结构数据。 三、`WITH RECURSIVE`语法 在支持`WITH RECURSIVE`的数据库(如PostgreSQL、SQL Server)中,递归查询的通用语法如下: ```sql WITH ...

    广义确定性均匀递归树网络的拉普拉斯谱

    在复杂网络的模型构建与性质研究领域中, 确定性均匀递归树网络模型DURT(Deterministic Uniform Recursive Tree)得到了广泛应用。在DURT网络模型的基础上提出一种适用范围更广的广义确定性均匀递归树演化模型GDURT...

Global site tag (gtag.js) - Google Analytics