java 树形结构工具类

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

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

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

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

时间: 2024-10-29 19:07:12

java 树形结构工具类的相关文章

个人常用工具类:JAVA树形结构工具类02

JAVA树形结构工具类02 TreeNode import java.util.ArrayList; import java.util.List; /** * Created by Ace on 2017/6/12. */ public class TreeNode { protected int id; protected int parentId; List<TreeNode> children = new ArrayList<TreeNode>(); public List&

个人常用工具类:JAVA树形结构工具类01

JAVA树形结构工具类 BaseTreeObj.java /** * 基层树形结构实体类 * 必备属性:id,parentId,childsList */ @Data public class BaseTreeObj implements Serializable { private static final long serialVersionUID = 1L; private String id; private String parentId; private String name; p

java 处理树形结构工具类

import com.alibaba.druid.util.StringUtils; import com.ywb.pms.vo.BaseTreeNode; import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; import jav

解析java树形结构

思路一: 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父节点 ) b.表数据: insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0); insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1); insert into tb_

UrlUtils工具类,Java URL工具类,Java URL链接工具类

UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年7月15日 http://www.cnblogs.com/fanshuyao/ Java代码   import java.util.Ha

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ?Copyright 蕃薯耀 2017年9月13日 http://www.cnblogs.com/fanshuyao/ 直接上代码: import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.ref

[精品] 收集的27个java开发常用工具类.基本满足开发需求

原文:[精品] 收集的27个java开发常用工具类.基本满足开发需求 源代码下载地址:http://www.zuidaima.com/share/1596028005993472.htm 最近从网上收集的java开发常用的工具类,分享给大家.基本满足开发需求.推荐给热爱最代码以及java的牛牛们.   每个类都有注释的,欢迎大家可以下载使用. 字符编码:CharTools, base64:Base64 *.java Md5加密:  MD5*.java 上传:*Uploader* 生成缩略图类:T

java MD5数据加密工具类

package com.wetuo.util; import java.security.MessageDigest; /**  * 数据加密工具类  * @author wzp  *  */ public class DataUtil { public static String md5(String str) { StringBuffer buffer = new StringBuffer(); char[] chars = { '0', '1', '2', '3', '4', '5', '

Java内存结构、类的初始化、及对象构造过程

概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的读写过程:除了在执行我们写的显式的可见代码外,Jvm还会自动帮我们帮一些事,包括类的加载.初始化.GC等,这些也不特殊.以下分别来说下这些概念. Java内存结构.类的初始化.及对象构造过程