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