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;

    }

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

相关推荐
故事和你911 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Configure-Handler1 小时前
buildroot System configuration
java·服务器·数据库
:Concerto2 小时前
JavaSE 注解
java·开发语言·sprint
电商API_180079052473 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
一点程序3 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
C雨后彩虹3 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
2601_949809593 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
vx_BS813303 小时前
【直接可用源码免费送】计算机毕业设计精选项目03574基于Python的网上商城管理系统设计与实现:Java/PHP/Python/C#小程序、单片机、成品+文档源码支持定制
java·python·课程设计
2601_949868363 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
达文汐4 小时前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣