树形结构数据还原成普通list,根据父类id获得所有子孙后代id集合方法实现

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形结构数据还原成普通list,根据父类id获得所有子孙后代id集合方法实现相关的知识,希望对你有一定的参考价值。

说明

   代码是自己项目中的部分代码,对于小白可能不太友好,容易看不太懂,代码其实不是很重要,重要的是设计思路,比如我们做的java三大排序算法的时候,和打印菱形、五角星图案时候,只要自己明白的了设计思路,代码写起来就容易多了。

   下面代码实现的思路还是,通过不断循环自身的方法,知道下级没有数据或者为null时,结局遍历循环。

树形结构数据中,根据父类id获取子孙后代id集合和 树形结构数据还原成普通list集合方法 

    /**
     *
     *获得下级子类id集合
     * @return
     */
    private void getChildrenIds(Long parentId,List<Long> idList) {
      List<CustomEntityCategory> children= customCategoryService.list(Wrappers.<CustomEntityCategory>lambdaQuery().eq(CustomEntityCategory::getParentId,parentId));
      if(CollectionUtil.isNotEmpty(children)){
          idList.addAll(children.stream().map(CustomEntityCategory::getId).collect(Collectors.toList()));
          children.forEach(e->{
              getChildrenIds(e.getId(),idList);
          });
      }
    }


    /**
     *
     *将树形队形还原成普通list集合
     * @return
     */
    private void treeToList(List<CustomEntityTreeDTO> treeList, Long parentId, List<CustomEntityCategory> entityCategories, List<CustomEntity> customEntities) {
        if (CollectionUtil.isNotEmpty(treeList)) {
            treeList.forEach(e -> {
                CustomEntityCategory entity = BeanUtil.copyProperties(e, CustomEntityCategory.class);
                Long id = IdWorker.getId(entity);
                entity.setId(id);
                entity.setParentId(parentId);
                int level=e.getLevel()==null?2:e.getLevel();
                entity.setLevel(level);
                entityCategories.add(entity);
                if (CollectionUtil.isNotEmpty(e.getCustomEntityDTOList())) {
                   List<CustomEntity> customEntityList= BeanUtil.copy(e.getCustomEntityDTOList(), CustomEntity.class);
                    customEntityList.forEach(t->t.setCategoryId(id));
                    customEntities.addAll(customEntityList);
                }
                treeToList(e.getChildren(),id,entityCategories,customEntities);
            });
        }
    }

 调用上面方法的部分代码

 List<Long> idList= Lists.newArrayList();
            getChildrenIds(dto.getId(),idList);
            if(CollectionUtil.isNotEmpty(idList)){
                //删除分类
                customCategoryService.removeByIds(idList);
                //删除实体
                customEntityService.remove(Wrappers.<CustomEntity>lambdaQuery().in(CustomEntity::getCategoryId, idList));
            }
            List<CustomEntityCategory> entityCategories = Lists.newArrayList();
            List<CustomEntity> customEntities = Lists.newArrayList();
            treeToList(dto.getChildren(),dto.getId(), entityCategories, customEntities);
            if (CollectionUtil.isNotEmpty(entityCategories)) {
                customCategoryService.saveBatch(entityCategories);
            }
            if (CollectionUtil.isNotEmpty(customEntities)) {
                customEntityService.saveBatch(customEntities);
            }

相关文章

《Java组装树形列表并排序显示》

以上是关于树形结构数据还原成普通list,根据父类id获得所有子孙后代id集合方法实现的主要内容,如果未能解决你的问题,请参考以下文章

根据ID或者ID集合查找树形结构数据里面ID所对应的节点信息

java树形结构如何从数据库读取数据

巧妙利用引用,将数组转换成树形数组

如何用java与jsp实现树形结构

记一则 Lambda内递归调用方法将集合对象转换成树形结构

mysql巧妙化解递归查询树形数据 | 纯sql