1.使用的hutool支持库的TreeUtil构建的树,确认maven pom文件有导入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.10</version>
</dependency>
2.定义基类,仅id和父节点id,节点最基础的属性
@Getter
@Setter
@NoArgsConstructor
public abstract class BaseTreeNodeDto {
/**
* 基类,必须有id和父节点id
*/
protected String id;
protected String parentId;
}
3.接入不同的数据(区域,部门等等)可以定义子类继承基类,定义特有属性。例如:
一个idea插件lombok 巨无敌好用
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class DepartMentTreeNode extends BaseTreeNodeDto{
public String rank;
public String maxRole;
}
源码:
/**
*
* @param list 需要构建树的元素列表
* @param root 根节点id,这里注意,根节点id一定要存在,树的构建从根节点开始
* @return List<Tree<String>> 返回一个list结构,树的列表
*/
public static List<Tree<String>> createTree(List list,String root) {
TreeNodeConfig config = new TreeNodeConfig();
config.setIdKey("id");
//转换器,使用反射,对属性进行映射
List<Tree<String>> build = TreeUtil.build(list, root, config, (object, tree) -> {
Field[] fields = ReflectUtil.getFieldsDirectly(object.getClass(), true);
for (Field field : fields) {
String fieldName = field.getName();
Object fieldValue = ReflectUtil.getFieldValue(object, field);
tree.putExtra(fieldName, fieldValue);
}
});
return build;
}