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;

    }

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

相关推荐
Edingbrugh.南空26 分钟前
Flink ClickHouse 连接器数据读取源码深度解析
java·clickhouse·flink
NE_STOP38 分钟前
SpringBoot--简单入门
java·spring
hqxstudying1 小时前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
Dcs1 小时前
VSCode等多款主流 IDE 爆出安全漏洞!插件“伪装认证”可执行恶意命令!
java
保持学习ing2 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
京东云开发者2 小时前
Java的SPI机制详解
java
超级小忍2 小时前
服务端向客户端主动推送数据的几种方法(Spring Boot 环境)
java·spring boot·后端
程序无bug2 小时前
Spring IoC注解式开发无敌详细(细节丰富)
java·后端
小莫分享2 小时前
Java Lombok 入门
java
程序无bug2 小时前
Spring 对于事务上的应用的详细说明
java·后端