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回答
-
resourceDtoList一直有值,最初就是正常的列表,看这行赋值
循环的意义是找每个元素的子节点,所以,循环的每一个节点就是parent
032021-08-08
相似问题