好久就想写博客了,苦苦因为没时间...没关系。从现在开始,每天我都会努力抽出点时间来进行做一次总结。把我认为在项目需求中认为很有用的东西,展示给大家,希望大家一起学习,一起进步。第一次做总结,写的不好的,提出来一起学习,谢谢。
分析: 在业务需求总,我们总会碰到一些业务。比如:对上下级的用户关系进行遍历,对资源权限进行遍历...等等。这些业务非常常见。在同一个项目中,他的代码遍历都是类似的,为了更高效的复用代码,我们有必要进行深成次的封转。下面是我花了一点时间进行封装,有需要直接拿去用,转载请说明出处。
本代码主要是为了节省对于上下级关系的实体类进行遍历,进行通用性封装。不多说:上代码。
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
 * 
 * 描述:基层树形结构实体类--ID AND PARENTID AND CHILDSLIST
 * 作者: xfz
 * 时间:2016年7月2日
 * 版本号:1.0
 */
public class BaseTreeObj<E ,ID extends Serializable> implements Serializable{
	private static final long serialVersionUID = 1L;
	private ID id;
	private ID parentId;
	private List<E> childsList=new ArrayList<E>();
	public ID getId() {
		return id;
	}
	public void setId(ID id) {
		this.id = id;
	}
	public ID getParentId() {
		return parentId;
	}
	public void setParentId(ID parentId) {
		this.parentId = parentId;
	}
	public List<E> getChildsList() {
		return childsList;
	}
	public void setChildsList(List<E> childsList) {
		this.childsList = childsList;
	}
}
import java.io.Serializable;
import java.util.List;
/**
 * 
 * 描述:树形结构服务类
 * 作者: xfz
 * 时间:2016年7月2日
 * 版本号:1.0
 */
public interface TreeInterface<T extends BaseTreeObj<T,ID>, ID extends Serializable>{
	/**
	 * 获得指定节点下所有归档
	 * @param list
	 * @param parentId
	 * @return
	 * @author xfz
	 * 上午1:09:49
	 */
	public  List<T> getChildTreeObjects(List<T> list,ID parentId);
	/**
	 * 递归列表
	 * @param list
	 * @param t
	 * @author xfz
	 * 上午1:11:57
	 */
	public  void recursionFn(List<T> list,T t);
	/**
	 * 获得指定节点下的所有子节点
	 * @param list
	 * @param t
	 * @return
	 * @author xfz
	 * 上午1:12:55
	 */
	public  List<T> getChildList(List<T> list,T t);
	/**
	 * 判断是否还有下一个子节点
	 * @param list
	 * @param t
	 * @return
	 * @author xfz
	 * 上午1:13:43
	 */
	public  boolean hasChild(List<T> list, T t);
}
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * 
 * 描述:获得树形的服务实现 作者: xfz
*时间:2016年7月2日
 *版本号:1.0
 */
public abstract class TreeService<T extends BaseTreeObj<T,ID> , ID extends Serializable> implements
		TreeInterface<T, ID> {
	public List<T> getChildTreeObjects(List<T> list, ID parentId) {
		List<T> returnList = new ArrayList<T>();
		for (Iterator<T> iterator = list.iterator(); iterator.hasNext();) {
			T res= (T) iterator.next();
			/**
			 * 判断第一个对象是否为第一个节点
			 * 
			 */
			if(res.getParentId()==parentId){
				/**
				 * 相等--说明第一个节点为父节点--递归下面的子节点
				 */
				recursionFn(list, res);
				returnList.add(res);
			}
		}
		return returnList;
	}
	/**
	 * 递归列表
	 * 
	 * @param list
	 * @param t
	 * @author xfz
 *上午1:11:57
	 */
	public void recursionFn(List<T> list, T t) {
		List<T> childsList=getChildList(list, t);
		/**
		 * 设置他的子集对象集
		 */
		t.setChildsList(childsList);
		/**
		 * 迭代--这些子集的对象--时候还有下一级的子级对象
		 */
		for (T nextChild : childsList) {
			/**
			 * 下一个对象,与所有的资源集进行判断
			 */
			if(hasChild(list, nextChild)){
				/**
				 * 有下一个子节点,递归
				 */
				Iterator<T> it = childsList.iterator();
				while (it.hasNext()) {
					T node = it.next();
					/**
					 * 所有的对象--跟当前这个childsList 的对象子节点
					 */
					recursionFn(list, node);
				}
			}
		}
	}
	/**
	 * 获得指定节点下的所有子节点
	 * 
	 * @param list
	 * @param t
	 * @return
	 * @author xfz
 *上午1:12:55
	 */
	public List<T> getChildList(List<T> list, T t) {
		List<T> childsList=new ArrayList<T>();
		Iterator<T> it=list.iterator();
		while(it.hasNext()){
			T child=it.next();
			/**
			 * 判断集合的父ID是否等于上一级的id
			 */
			if(((BaseTreeObj<T,ID>)child).getParentId()==((BaseTreeObj<T,ID>)t).getId()){
				childsList.add(child);
			}
		}
		return childsList;
	}
	/**
	 * 判断是否还有下一个子节点
	 * 
	 * @param list
	 * @param t
	 * @return
	 * @author xfz
*上午1:13:43
	 */
	public boolean hasChild(List<T> list, T t) {
		return getChildList(list, t).size() > 0 ? true : false;
	}
}
原文:http://www.cnblogs.com/xfzlovezjj/p/5634678.html