树形工具构建,java实现
package com.tansun.risk.rwa.common.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* 树形结构工具类
*
* @author IT_CREATE
* @date 2023/12/13 16:59
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class TreeBean<idType extends Comparable<idType>> implements Serializable {
private static final long serialVersionUID = 2978205537968679584L;
/*id和pid必须赋值,otherParameter装一些其他参数,比如name,key-value键值对的形式*/
/*将你从数据库查出来的集合循环,然后对每一行数据进行赋值转换成TreeBean结构,调用内部静态方法即可得到树形结构列表*/
/**
* id
*/
private idType id;
/**
* pid
*/
private idType pid;
/**
* 其他参数,需要展示的参数,比如name之类的
*/
private Map<String, Object> otherParameter;
/*---------------------------------下面这些不需要你赋值-------------------------------------------*/
/**
* 是否含有下一级
*/
private Boolean hasChildren;
/**
* 包含的子节点
*/
private List<TreeBean<idType>> children;
/**
* 子节点的集合大小
*/
private Long childrenSize;
/**
* 级别
*/
private Long level;
/**
* 使用递归方法建树(返回包含顶级节点)
*
* @param treeBeans 按规则转换的树形实体集合列表,没有层次结构
* @param topId 指定顶级节点id,必须指定
* @return 树形结构实体集合
*/
public static <idType extends Comparable<idType>> List<TreeBean<idType>> buildByRecursive(List<TreeBean<idType>> treeBeans, idType topId) {
return buildByRecursive(treeBeans, topId, true);
}
/**
* 使用递归方法建树
*
* @param treeBeans 按规则转换的树形实体集合列表,没有层次结构
* @param topId 指定顶级节点id,必须指定
* @param isCarryTopNode 返回节点层次结构,是否携带顶级节点返回
* <br/>设置为false,则将顶级节点的数据去除,返回指定顶级节点的子节点树形结构集合;
* <br/>设置为true,则返回包含顶级节点的树形结构集合(则返回集合中只包含一个顶级节点,顶级节点内部包含子节点信息)
* @return 树形结构实体集合
*/
public static <idType extends Comparable<idType>> List<TreeBean<idType>> buildByRecursive(List<TreeBean<idType>> treeBeans, idType topId, boolean isCarryTopNode) {