用于后端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); }