public List<SysOldOrgNewDto> getAll() {
//查询所有的记录
List<SysOldOrgNew> sysOldOrgNewList = sysOldOrgNewMapper.selectList(null);
List<SysOldOrgNewDto> sysOldOrgNewDtoList = new ArrayList<>();
for (SysOldOrgNew sysOldOrgNew : sysOldOrgNewList) {
SysOldOrgNewDto sysOldOrgNewDto = new SysOldOrgNewDto();
sysOldOrgNewDto.setId(sysOldOrgNew.getId());
sysOldOrgNewDto.setParentId(sysOldOrgNew.getParentId());
sysOldOrgNewDto.setName(sysOldOrgNew.getName());
sysOldOrgNewDto.setOldName(sysOldOrgNew.getOldName());
sysOldOrgNewDto.setCode(sysOldOrgNew.getCode());
sysOldOrgNewDto.setParentCode(sysOldOrgNew.getParentCode());
sysOldOrgNewDtoList.add(sysOldOrgNewDto);
}
//查询所有的根节点
List<SysOldOrgNewDto> sysOldOrgNewDtoRootList = new ArrayList<>();
for (SysOldOrgNewDto sysOldOrgNewDto : sysOldOrgNewDtoList) {
if (2 == sysOldOrgNewDto.getParentId()) {//父节点是2的,为根节点。
sysOldOrgNewDtoRootList.add(sysOldOrgNewDto);
}
}
//排序,根据主键id排序
sysOldOrgNewDtoList.sort(Comparator.comparingInt(SysOldOrgNewDto::getId));
//给根节点添加子节点,用到递归调用getChild
for (SysOldOrgNewDto sysOldOrgNewDtoRoot : sysOldOrgNewDtoRootList) {
List<SysOldOrgNewDto> childList = getChild(sysOldOrgNewDtoRoot.getId(), sysOldOrgNewDtoList);
sysOldOrgNewDtoRoot.setSysOldOrgNewDtoList(childList);
}
return sysOldOrgNewDtoRootList;//最后返回的是根节点集合,所有数据递归遍历后全set到里边了
}
/**
* 获取子节点
*
* @param id 每个节点的id(和所有数据列表中的父节点做比较)
* @param sysOldOrgNewDtoList 所有的列表集合
* @return 每个根节点下,所有子节点列表
*/
private List<SysOldOrgNewDto> getChild(Integer id, List<SysOldOrgNewDto> sysOldOrgNewDtoList) {
List<SysOldOrgNewDto> childList = new ArrayList<>();
for (SysOldOrgNewDto sysOldOrgNewDto : sysOldOrgNewDtoList) {
if (id.equals(sysOldOrgNewDto.getParentId())) {
childList.add(sysOldOrgNewDto);
}
}
//递归查询
for (SysOldOrgNewDto sysOldOrgNewDto : childList) {
sysOldOrgNewDto.setSysOldOrgNewDtoList(getChild(sysOldOrgNewDto.getId(), sysOldOrgNewDtoList));//注意这个地方,要用sysOldOrgNewDtoList这个集合
}
//排序
childList.sort(Comparator.comparing(SysOldOrgNewDto::getId));
//如果节点下没有子节点,返回一个空list(递归退出)
if (childList.size() == 0) {
return new ArrayList<>();
}
return childList;
}
递归方法学习
最新推荐文章于 2024-11-06 20:20:40 发布
该代码段展示了如何从数据库查询所有的SysOldOrgNew记录,并通过递归方式构建树形数据结构。首先,从mapper获取所有记录,然后遍历并创建对应的Dto对象,设置其属性。接着,筛选出根节点(parent_id为2),并按id排序。通过递归函数getChild,为每个根节点添加子节点,同时对子节点列表进行排序。最终返回包含所有根节点的列表,每个根节点包含了完整的子树。
摘要由CSDN通过智能技术生成