`
shangwangwuzui1988
  • 浏览: 11498 次
  • 性别: 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 ...

    C#递归算法画树C#递归算法画树C#递归算法画树

    递归画树通常涉及到数据结构中的树(如二叉树、N叉树等)的可视化表示,或者在控制台上创建出类似树状的文本输出。 首先,让我们理解递归的基本概念。递归是指一个函数在执行过程中调用自身的过程。这种调用通常...

Global site tag (gtag.js) - Google Analytics