树结构转List

使用LinkedList效率更高

1、单个顶级节点

java 复制代码
public static List<CmsStudentOutline> getTreeList(CmsStudentOutline root) {

        List<CmsStudentOutline> list = new ArrayList<>();
        Queue<CmsStudentOutline> queue = new LinkedList<>();

        if (root == null) {
            return null;
        }
        root.setPid("0");
        //使用UUID也可以 root.setId(UUID.randomUUID().toString());
        root.setId(IdUtils.simpleUUID());
        queue.offer(root);//添加一个元素并返回true如果队列已满,则返回false
        while (!queue.isEmpty()) {
            CmsStudentOutline tree = queue.poll();//移除并返问队列头部的元素,如果队列为空,则返回null
            String pid = tree.getId();
            List<CmsStudentOutline> children = tree.getChildren();
            if (children != null) {
                for (CmsStudentOutline child : children) {
                    child.setPid(pid);
                    //使用UUID也可以 child.setId(UUID.randomUUID().toString());
                    child.setId(IdUtils.simpleUUID());
                    queue.offer(child);//添加一个元素并返回true,如果队列已满,则返回false
                }
            }
            CmsStudentOutline cmsStudentOutline = new CmsStudentOutline();
            cmsStudentOutline.setId(tree.getId());
            cmsStudentOutline.setPid(tree.getPid());
            cmsStudentOutline.setName(tree.getName());
            list.add(cmsStudentOutline);
        }
        return list;
    }

2、如果有多个顶级节点(循环即可)

java 复制代码
public List<CmsStudentOutline> getList(List<CmsStudentOutline> cmsStudentOutline)
    {
        List<CmsStudentOutline> list = new ArrayList<>();
        for (CmsStudentOutline studentOutline : cmsStudentOutline) {
            list.addAll(breadthFirstTree2List(studentOutline));
        }
        return list;
    }
相关推荐
鲨鱼辣钊2 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
学长毕业设计7 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
东小西7 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西7 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午7 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065257 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
小范同学_7 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
予昊8 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
2601_962203519 小时前
【SpringAI入门】初识SpringAI
java
weixin_461408589 小时前
Mybatis-flex小记
java·开发语言·mybatis