packagecom.ytkj.rose.util;importorg.springframework.util.StringUtils;importjavax.validation.constraints.NotNull;importjava.lang.reflect.Field;importjava.util.ArrayList;importjava.util.Collection;importjava.util.HashSet;importjava.util.Set;public classTreeUtils {/*** 集合转树结构
*
*@paramcollection 目标集合
*@paramclazz 集合元素类型
*@return转换后的树形结构*/
public static Collection toTree(@NotNull Collection collection, @NotNull Classclazz) {return toTree(collection, null, null, null, clazz);
}/*** 集合转树结构
*
*@paramcollection 目标集合
*@paramid 节点编号字段名称
*@paramparent 父节点编号字段名称
*@paramchildren 子节点集合属性名称
*@paramclazz 集合元素类型
*@return转换后的树形结构*/
public static Collection toTree(@NotNull Collection collection, String id, String parent, String children, @NotNull Classclazz) {try{if (collection == null || collection.isEmpty()) return null;//如果目标集合为空,直接返回一个空树
if (StringUtils.isEmpty(id)) id = "id"; //如果被依赖字段名称为空则默认为id
if (StringUtils.isEmpty(parent)) parent = "parent"; //如果依赖字段为空则默认为parent
if (StringUtils.isEmpty(children)) children = "children"; //如果子节点集合属性名称为空则默认为children//初始化根节点集合, 支持 Set 和 List
Collectionroots;if (collection.getClass().isAssignableFrom(Set.class)) {
roots= new HashSet<>();
}else{
roots= new ArrayList<>();
}//获取 id 字段, 从当前对象或其父类
Field idField;try{
idField=clazz.getDeclaredField(id);
}catch(NoSuchFieldException e1) {
idField=clazz.getSuperclass().getDeclaredField(id);
}//获取 parentId 字段, 从当前对象或其父类
Field parentField;try{
parentField=clazz.getDeclaredField(parent);
}catch(NoSuchFieldException e1) {