当前位置: 首页> 财经> 股票 > 2种方法将集合数据List构建成树形结构

2种方法将集合数据List构建成树形结构

时间:2025/8/24 12:36:22来源:https://blog.csdn.net/qq_21880261/article/details/139100606 浏览次数:0次

文章目录

  • 递归循环构建树结构
  • hutool.TreeUtil.build构建树结构

在这里插入图片描述

递归循环构建树结构

先查最外层树节点数据,再递归遍历每一层子节点数据

public ApiResultDto<List<LocationDto>> getTreeByParams(LocationSearchDto searchDto, SecurityUser user) {// 最外层的树结构【此最外层是BUILDING,也就是BUILDING的parentId为null】,不是获取所有数据,与下不同searchDto.setProjectId(user.getProjectId());searchDto.setType(LocationType.BUILDING);List<LocationEntity> locationEntities = locationDao.findByParams(searchDto);List<LocationDto> locationDtos = locationEntities.stream().map(t -> {LocationDto dto = new LocationDto();dto.setId(t.getId());dto.setName(t.getName());dto.setType(t.getType());dto.setSort(t.getSort());dto.setSerialNum(t.getSerialNum());dto.setCode(t.getCode());dto.setParentId(t.getParentId());// 循环递归获取子节点iterChild(dto, user.getProjectId());return dto;}).collect(Collectors.toList());return ApiResultDto.success(locationDtos);}/*** 遍历子节点.** @param dto 空间dto*/private void iterChild(LocationDto dto, UUID projectId) {
//  <select id="findChildById"
//        parameterType="map" resultType="common.po.location.LocationEntity">
//        select *
//        from location
//        where model_status = 1
//        and parent_id = #{id}
//    </select>List<LocationEntity> locations = locationDao.findChildById(dto.getId());if (CollectionUtils.isEmpty(locations)) {return;}List<LocationDto> locationDtos = locations.stream().map(t -> {LocationDto childDto = new LocationDto();childDto.setId(t.getId());childDto.setName(t.getName());childDto.setType(t.getType());childDto.setSort(t.getSort());childDto.setSerialNum(t.getSerialNum());childDto.setCode(t.getCode());childDto.setParentId(t.getParentId());// 递归遍历子节点iterChild(childDto, projectId);return childDto;}).collect(Collectors.toList());dto.setChildren(locationDtos);}

hutool.TreeUtil.build构建树结构

   public ApiResultDto<List<Tree<UUID>>> getTreeByParams(LocationSearchDto searchDto, SecurityUser user) {// 查询到所有数据searchDto.setProjectId(user.getProjectId());List<LocationEntity> entities = locationDao.findByParams(searchDto);// 获取非第一层"BUILDING"的数据的父级信息【查询到子节点,要带出对应的所有父节点,如果不需要可以删除】List<LocationEntity> locationEntities = new ArrayList<>();locationEntities.addAll(entities);for (LocationEntity entity : entities) {addParentEntities(entity, locationEntities);}locationEntities = locationEntities.stream().distinct().collect(Collectors.toList());// 构建树,主要数据在treeNode中,其余数据在extra字段中List<TreeNode<UUID>> nodeList = new ArrayList<>();for (LocationEntity entity : locationEntities) {TreeNode<UUID> treeNode = new TreeNode<>(entity.getId(), entity.getParentId(), entity.getName(), null);nodeList.add(treeNode);Map<String, Object> extra = new HashMap<>();extra.put("name", entity.getName());extra.put("serialNum", entity.getSerialNum());extra.put("code", entity.getCode());extra.put("type", entity.getType());extra.put("sort", entity.getSort());if (MapUtils.isNotEmpty(extra)) {treeNode.setExtra(extra);}}List<Tree<UUID>> result = TreeUtil.build(nodeList, null);return ApiResultDto.success(result);}/*** 获取当前空间实体额所有上级实体.** @param entity 当前空间实体* @param res    结果*/private void addParentEntities(LocationEntity entity, List<LocationEntity> res) {if (Objects.nonNull(entity) && Objects.nonNull(entity.getParentId())) {LocationEntity parentEntity = locationDao.selectById(entity.getParentId());if (Objects.nonNull(parentEntity)) {res.add(parentEntity);addParentEntities(parentEntity, res);}}}
关键字:2种方法将集合数据List构建成树形结构

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: