loadTree()

来源:12-2 资源配置管理

heflat

2021-07-31

public List<ResourceDto> loadTree() {
        ResourceExample example = new ResourceExample();
        example.setOrderByClause("id asc");
        List<Resource> resourceList = resourceMapper.selectByExample(example);

        List<ResourceDto> resourceDtoList = CopyUtil.copyList(resourceList, ResourceDto.class);
        for (int i = resourceDtoList.size() - 1; i >= 0; i--) {
            ResourceDto child = resourceDtoList.get(i);

            // 如果当前节点没有父节点,则不用往下了
            if (StringUtils.isEmpty(child.getParent())) {
                continue;
            }

            // 查找父节点
            for (int j = i - 1; j >= 0; j--) {
                ResourceDto parent = resourceDtoList.get(j);

                if (child.getParent().equals(parent.getId())) {
                    if (CollectionUtils.isEmpty(parent.getChildren())) {
                        parent.setChildren(new ArrayList<>());
                    }

                    // 添加到最前面,否则会变成倒序,因为循环是从后往前循环的
                    parent.getChildren().add(0, child);
                    // 子节点找到父节点后,删除列表中的子节点
                    resourceDtoList.remove(child);
                }
            }
        }
        return resourceDtoList;
    }

老师,这段代码,我有一个疑问:最终返回的是 resourceDtoList,但是 parent 没有添加到 resourceDtoList 中,我不知道这里是什么原因?

Java 的引用传递吗,好像又不是。

写回答

1回答

甲蛙

2021-08-02

resourceDtoList一直有值,最初就是正常的列表,看这行赋值

//img.mukewang.com/szimg/6107c41009b0713508260287.jpg

循环的意义是找每个元素的子节点,所以,循环的每一个节点就是parent

//img.mukewang.com/szimg/6107c45109ceb85406300133.jpg


0
3
heflat
回复
甲蛙
我现在明白了,感谢老师的解答。
2021-08-08
共3条回复

Spring Cloud+ Vue前后端分离开发企业级在线视频系统

全网稀缺课程 市场热门项目+主流框架 一课掌握前后端技术

1743 学习 · 1697 问题

查看课程

相似问题