java树形结构工具类

转载:https://www.oschina.net/code/snippet_128691_18842

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值