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;

    }

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

相关推荐
apocelipes1 小时前
golang unique包和字符串内部化
java·python·性能优化·golang
Full Stack Developme2 小时前
java.text 包详解
java·开发语言·python
刘梦凡呀3 小时前
C#获取钉钉平台考勤记录
java·c#·钉钉
best_virtuoso3 小时前
PostgreSQL 常见数组操作函数语法、功能
java·数据结构·postgresql
yudiandian20143 小时前
02 Oracle JDK 下载及配置(解压缩版)
java·开发语言
楚韵天工4 小时前
宠物服务平台(程序+文档)
java·网络·数据库·spring cloud·编辑器·intellij-idea·宠物
helloworddm4 小时前
Orleans Stream SubscriptionId 生成机制详解
java·系统架构·c#
失散134 小时前
分布式专题——43 ElasticSearch概述
java·分布式·elasticsearch·架构
ajsbxi4 小时前
【Java 基础】核心知识点梳理
java·开发语言·笔记
聪明的笨猪猪4 小时前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试