用于后端java的实用、简洁、通俗易懂的树形工具类使用笔记
设计需求是做一个类似于部门管理的树形结构,后端设计表写逻辑,为前端提供接口,将数据以树形结构返回
这里直接上代码,基本可以直接拿去用,把父id和名称做对应的修改就完了,里面先把使用数据查出来,创建工具类并设置id、树结构标识ParentIdKey、名称,再调build方法把查出来的数据和工具类放进去就行了(其中父id命名为groupId)

import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.ReflectUtil;
public R<List<Tree<String>>> listAll() {
List<Group> groupList = groupService.selectAll();//全查出所有可用数据
TreeNodeConfig config = new TreeNodeConfig();
config.setIdKey("id");
config.setParentIdKey("groupId");//父id在库里命名为groupId
config.setDeep(10);//最大递归深度 默认无限制
config.setNameKey("name");
List<Tree<String>> treeNodes = TreeUtil.build(groupList, "0", config, (group, tree) -> {
tree.setId(group.getId());//唯一标识符 必填属性
tree.setParentId(group.getGroupId());//父id 必填属性
tree.setName(group.getName());
tree.setWeight(group.getPosition());
Field[] fields = ReflectUtil.getFieldsDirectly(group.getClass(), true);
for (Field field : fields) {
String fieldName = field.getName();
Object fieldValue = ReflectUtil.getFieldValue(group, field);
tree.putExtra(fieldName, fieldValue);
}
});
log.info(JSONUtil.toJsonStr("tree数据:" + treeNodes));
return R.ok(treeNodes);
}


















