树形结构工具类

来源:互联网 发布:上海行知中学初中部 编辑:程序博客网 时间:2024/06/04 20:55

一  在系统管理的时候,做菜单用到了树形工具类,封装了一下,以后备用。

直接上代码:

package com.xuhao.callBack;import java.io.Serializable;import java.util.ArrayList;import java.util.List;/** * 基层树形结构实体类 * @author XuHao * */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;}  }


package com.xuhao.callBack;import java.io.Serializable;import java.util.List;/** * 树形结构服务类 * @author XuHao * */public interface TreeInterface<T extends BaseTreeObj<T, ID>, ID extends Serializable> {/** * 获得指定节点下的所有归档 * @param list * @param parentId * @return */public List<T> getChildTreeObjects(List<T> list, ID parentId);/** * 递归列表 * @param list * @param t */public void recursionFn(List<T> list, T t);/** * 获得指定节点下的所有子节点 * @param list * @param t * @return */public List<T> getChildList(List<T> list, T t);/** * 判断是否还有下一个子节点 * @param list * @param t * @return */public boolean hasChild(List<T> list, T t);}



package com.xuhao.callBack;import java.io.Serializable;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * 树形工具类 * @author XuHao * */public class TreeUtil<T extends BaseTreeObj<T, ID>, ID extends Serializable>    implements TreeInterface<T, ID>{/** * 获得指定节点下的所有归档     eg: List<Resource>资源List   */@Overridepublic 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;}/** * 递归列表 */@Overridepublic void recursionFn(List<T> list, T t) {//  获取子集List<T> childList = getChildList(list, t);// 设置他的子集对象集t.setChildsList(childList);//  迭代这些子集的对象 是否还有下一级的子集对象for(T nextChild : childList){//  下一个对象 与所有的资源集进行判断if(hasChild(list, nextChild)){//  有下一个子节点 递归Iterator<T> it = childList.iterator();while(it.hasNext()){T node = it.next();//  递归   childList的对象子节点recursionFn(list, node);}}}}/** * 获得指定节点下的所有子节点 */@Overridepublic List<T> getChildList(List<T> list, T t) {List<T> childList = new ArrayList<T>();Iterator<T> iterator = list.iterator();while(iterator.hasNext()){T child = iterator.next();//  判断集合的父ID是否是上一级的IDif(((BaseTreeObj<T, ID>)child).getParentId() == ((BaseTreeObj<T, ID>)t).getId()){childList.add(child);}}return childList;}/** * 判断是否还有下一个子节点 */@Overridepublic boolean hasChild(List<T> list, T t) {return getChildList(list, t).size() > 0 ? true : false;}}


原创粉丝点击