java递归返回树形数据结构
近期项目有个需求,需要将组织机构数据拼成树型结构返回至前端。我的做法如下
方式一、使用递归方式实现
private List<SysDept> getSysDepts(String deptId) {
// 1、获取表中所有数据 (自行根据实际场景拿到所有表数据)
List<SysDept> all = getAllDept();
// 3、返回的结果集
List<SysDept> tree = new ArrayList<>();
// 4、获取到最外层的部门信息
List<SysDept> parentSysDept = all.stream().filter(dept -> dept.getDeptId().equals(deptId)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(parentSysDept)){
// 5、取出部门信息
SysDept dept = parentSysDept.get(0);
// 6、放入集合中
tree.add(dept);
// 7、添加子节点
addChildDept(dept, all);
}
return tree;
}
private void addChildDept(SysDept sysDept, List<SysDept> all) {
// 1、拿到所传部门的字部门列表
List<SysDept> tempList = all.stream()
.filter(dept -> sysDept.getDeptId().equals(dept.getParentId()))
.collect(Collectors.toList());
sysDept.setChildren(tempList);
tempList.forEach(dept -> {
2、添加子节点
addChildDept(dept, all);
});
}
效果展示:
方式二、利用Hutool工具进行实现
private List<Tree<String>> getSysDepts(String deptId) {
// 获取所有数据
List<SysDept> all = getAllDept();
//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
treeNodeConfig.setIdKey("deptId");
// 最大递归深度
treeNodeConfig.setDeep(4);
//转换器 (这里参数的deptId,指的是最外层的deptId值)
List<Tree<String>> treeNodes = TreeUtil.build(all, deptId, treeNodeConfig,
(treeNode, tree) -> {
tree.setParentId(treeNode.getParentId());
// 扩展属性 ...(可以自行设置需要返回的字段)
tree.putExtra("deptId", treeNode.getDeptId());
tree.putExtra("status", treeNode.getStatus());
});
return treeNodes;
}
效果展示:
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
时间仓促,如有错误欢迎指出,欢迎在评论区讨论,如对您有帮助还请点个推荐、关注支持一下
作者:博客园 - 角刀牛
出处:https://www.cnblogs.com/jiaodaoniujava/
该文章来源互联网,本博仅以学习为目的,版权归原作者所有。
若内容有侵犯您权益的地方,请公告栏处联系本人,本人定积极配合处理解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)