Java多级目录树

1. 实体类

java 复制代码
public class Department{    
    private Long id;  //部门的id
    private String name;  //部门名字
​
    private Long parent_id;  //上级部门id
    private Department parent; //上级部门
​
    @JsonInclude(JsonInclude.Include.NON_EMPTY)//数据库不存在该字段
    private List<Department> children = new ArrayList<>();
}

2. 算法

java 复制代码
public List<Department> tree() {
    //1.查询所有对象
    List<Department> all = departmentMapper.loadAll();
    //2.建立id-department关系
    HashMap<Long,Department> map = new HashMap<>();
    all.forEach(dept->{
        map.put(dept.getId(),dept);
    });
    //3.维护对象之间的关系,List里装所有的祖宗结点
    List<Department> list = new ArrayList<>();
    for(Department department : all){        //如果没有父节点,是祖宗
        if (department.getParent_id() == null){
            list.add(department);
            continue;
        }
        //如果department不是祖宗  说明有爹
        Long parent_id = department.getParent_id(); //儿子department 拿到他爹的id
        Department parent = map.get(parent_id); //根据parent_id找到自己的爹
        parent.getChildren().add(department); //department的爹parent  拿出口袋 把儿子装进去
    }
    return list;
}
相关推荐
xyq20243 分钟前
Java 变量命名规则
开发语言
天启HTTP3 分钟前
HTTP代理和隧道代理的底层区别与适用场景分析
开发语言·网络协议·tcp/ip·php
清心歌4 分钟前
HashMap实现原理及扩容机制
java
一只大袋鼠4 分钟前
数据库连接池从入门到精通(下):Druid 连接池使用与工具类封装
java·数据库·连接池
小白学大数据4 分钟前
告别复杂 XPath:DeepSeek+Python 爬虫快速实践
开发语言·爬虫·python·selenium
禹中一只鱼7 分钟前
【IDEA 出现 `IDE error occurred`】
java·ide·spring boot·intellij-idea
西凉的悲伤7 分钟前
Guava类库——Lists.partition() 高效分批处理列表数据
java·guava
weixin_408099678 分钟前
【保姆级教程】按键精灵调用 OCR 文字识别 API(从0到1完整实战 + 可运行脚本)
java·前端·人工智能·后端·ocr·api·按键精灵
brahmsjiang9 分钟前
Java类加载机制解析:从JVM启动到双亲委派,再到Android的特殊实现
android·java·jvm
fengci.11 分钟前
LilCTF2025web(前半部分)
开发语言·网络·学习·php