个人常用工具类:JAVA树形结构工具类01
Posted jiang4yu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人常用工具类: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;
private List<BaseTreeObj> childsList = new ArrayList<>();
TreeUtil.java
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 获得树形结构的工具类
* 实际使用,可将BaseTreeObj直接覆盖为指定类
*/
public class TreeUtil
/**
* 获得指定节点下所有归档
* @param list
* @param parentId
* @return
*/
public static List<BaseTreeObj> list2TreeConverter(List<BaseTreeObj> list, String parentId)
List<BaseTreeObj> returnList = new ArrayList<>();
for (BaseTreeObj res : list)
//判断对象是否为根节点
if (res.getParentId().equals(parentId))
//该节点为根节点,开始递归
recursionFn(list, res); //通过递归为节点设置childList
returnList.add(res);
return returnList;
/**
* 递归列表
* 通过递归,给指定t节点设置childList
* @param list
* @param t
*/
public static void recursionFn(List<BaseTreeObj> list, BaseTreeObj t)
//只能获取当前t节点的子节点集,并不是所有子节点集
List<BaseTreeObj> childsList = getChildList(list, t);
//设置他的子集对象集
t.setChildsList(childsList);
//迭代子集对象集
for (BaseTreeObj nextChild : childsList) //遍历完,则退出递归
//判断子集对象是否还有子节点
if (!CollectionUtils.isEmpty(childsList))
//有下一个子节点,继续递归
recursionFn(list, nextChild);
/**
* 获得指定节点下的所有子节点
* @param list
* @param t
* @return
*/
public static List<BaseTreeObj> getChildList(List<BaseTreeObj> list, BaseTreeObj t)
List<BaseTreeObj> childsList = new ArrayList<BaseTreeObj>();
//遍历集合元素,如果元素的Parentid==指定元素的id,则说明是该元素的子节点
for (BaseTreeObj t1 : list)
if (t1.getParentId() .equals(t.getId()) )
childsList.add(t1);
return childsList;
/**
* 判断是否还有下一个子节点
* @param list
* @param t
*/
public static boolean hasChild(List<BaseTreeObj> list, BaseTreeObj t)
return getChildList(list, t).size() > 0 ? true : false;
以上是关于个人常用工具类:JAVA树形结构工具类01的主要内容,如果未能解决你的问题,请参考以下文章