好久就想写博客了,苦苦因为没时间...没关系。从现在开始,每天我都会努力抽出点时间来进行做一次总结。把我认为在项目需求中认为很有用的东西,展示给大家,希望大家一起学习,一起进步。第一次做总结,写的不好的,提出来一起学习,谢谢。

   分析:   在业务需求总,我们总会碰到一些业务。比如:对上下级的用户关系进行遍历,对资源权限进行遍历...等等。这些业务非常常见。在同一个项目中,他的代码遍历都是类似的,为了更高效的复用代码,我们有必要进行深成次的封转。下面是我花了一点时间进行封装,有需要直接拿去用,转载请说明出处。

 

  本代码主要是为了节省对于上下级关系的实体类进行遍历,进行通用性封装。不多说:上代码。

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