如何高效率组装树形数据

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

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

复制代码
@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;
    }
相关推荐
四谎真好看5 分钟前
Java 黑马程序员学习笔记(进阶篇20)
java·笔记·学习·学习笔记
BUTCHER56 分钟前
【原理扫描】SSL/TLS 服务器瞬时 Difie-Hellman 公共密钥过弱
java·服务器·网络·ssl
聪明的笨猪猪6 分钟前
hot 100 (1)—— 两数之和(哈希)
java·经验分享·算法·哈希算法
梵得儿SHI6 分钟前
Java 注解与反射实战:自定义注解从入门到精通
java·开发语言·注解·自定义注解·元注解·控制注解的作用·声明式编程思想
沐知全栈开发17 分钟前
Foundation 网格实例
开发语言
专注前端30年37 分钟前
【JavaScript】every 方法的详解与实战
开发语言·前端·javascript
速易达网络40 分钟前
Java Web登录系统实现(不使用开发工具)
java·开发语言·前端
凡间客1 小时前
Python编程之常用模块
开发语言·python
景彡先生1 小时前
Python基础语法规范详解:缩进、注释与代码可读性
开发语言·前端·python
悟能不能悟1 小时前
java重构旧代码有哪些注意的点
java·开发语言·重构