如何高效率组装树形数据

说到组装树形结构数据,一般首先想到的就是递归或者反射处理,这种处理数据的方式比较直观简单,但是有个缺点,如果数据量过大比如几万几十万,处理的速度就会非常慢。

下面是一种高效处理树形数据的代码

复制代码
@Getter
@Setter
@Accessors(chain = true)
public class Node<T extends Node<T>> implements Serializable {

    private static final long serialVersionUID = -5718813852451029714L;

    private String code;

    private String parentCode;

    private List<T> childList;

    private Integer sortNum;
}

 public static <T extends Node<T>> List<T> buildTree(List<T> nodes) {
        Map<String, T> nodeMap = new HashMap<>();
        List<T> roots = new ArrayList<>();

        for (T node : nodes) {
            nodeMap.put(node.getCode(), node);
        }

        for (T node : nodes) {
            String parentCode = node.getParentCode();
            if (parentCode == null || parentCode.isEmpty()) {
                roots.add(node);
            } else {
                Node<T> parentNode = nodeMap.get(parentCode);
                if (parentNode != null) {
                    if (parentNode.getChildList() == null) {
                        parentNode.setChildList(new ArrayList<>());
                    }
                    parentNode.getChildList().add(node);
                    parentNode.getChildList().sort(Comparator.comparing(t -> t.getSortNum() != null ? t.getSortNum() : 0));
                } else {
                    roots.add(node);
                }
            }
        }

        roots.sort(Comparator.comparing(t -> t.getSortNum() != null ? t.getSortNum() : 0));
        return roots;
    }
相关推荐
唐装鼠3 分钟前
C语言syslog()函数(deepseek)
c语言·开发语言·syslog
froginwe115 分钟前
SQL MIN() 函数详解
开发语言
2301_780669865 分钟前
GUI编程(常用组件、事件、事件常见写法)
java
青岛少儿编程-王老师7 分钟前
CCF编程能力等级认证GESP—C++7级—20251227
开发语言·c++
brevity_souls9 分钟前
Java 中 String、StringBuffer 和 StringBuilder
java·开发语言
ss27312 分钟前
类的线程安全:多线程编程-银行转账系统:如果两个线程同时修改同一个账户余额,没有适当的保护机制,会发生什么?
java·开发语言·数据库
写代码的【黑咖啡】16 分钟前
深入了解 Python 中的 Seaborn:优雅的数据可视化利器
开发语言·python·信息可视化
星火开发设计23 分钟前
栈的深度解析与C++实现
开发语言·数据结构·c++·学习·知识
再睡一夏就好26 分钟前
LInux线程池实战:单例模式设计与多线程安全解析
linux·运维·服务器·开发语言·javascript·c++·ecmascript
一只叫煤球的猫28 分钟前
并行不等于更快:CompletableFuture 让你更慢的 5 个姿势
java·后端·性能优化