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