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