java将list转成树结构

首先是实体类

java 复制代码
public class DwdCusPtlSelectDto {
	//id
    private String key;
    //值
    private String value;
    //中文名
    private String title;
    private List<DwdCusPtlSelectDto> children;
    private String parentId;
    public void addChild(DwdCusPtlSelectDto child) {
        if(this.children == null){
            this.children = new LinkedList<>();
        }
        this.children.add(child);
    }
}

方法

java 复制代码
private List<DwdCusPtlSelectDto> rulesToTree(List<DwdCusPtlSelectDto> assetRules) {
        List<DwdCusPtlSelectDto> list = new LinkedList<>();
        Map<String, DwdCusPtlSelectDto> nodeMap = new HashMap<>();

        // 将所有节点放入Map中,方便后续查找
        for (DwdCusPtlSelectDto node : assetRules) {
            nodeMap.put(node.getKey(), node);
        }
		
		//不知道为啥概率性出现重复结点,没办法就拿set判断下
        Set<String> set = new HashSet<>();

        // 构建树结构
        for (DwdCusPtlSelectDto node : assetRules) {
            if ("all".equals(node.getParentId())) {
                list.add(node);
                // 找到根节点
            } else {
                DwdCusPtlSelectDto parentNode = nodeMap.get(node.getParentId());
                if (parentNode != null&&!set.contains(node.getKey())) {
                    parentNode.addChild(node);
                    set.add(node.getKey());
                }
            }
        }
        return list;

    }

如果有老哥知道为啥会概率醒出现重复结点问题,可以评论告诉我一下

相关推荐
lee_curry3 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
九转成圣4 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
直奔標竿5 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵5 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
野生技术架构师7 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
小袁拒绝摆烂7 小时前
多表关联大平层转JSON树形结构
java·json
ja哇8 小时前
大厂面试高频八股
java·面试·职场和发展
yoyo_zzm9 小时前
Laravel6.x新特性全解析
java·spring boot·后端
Nick_zcy9 小时前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi