递归树

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;
	}
}

 

 

你可能感兴趣的:(递归)