最近项目中遇到了一个普通需求,在根据目录节点id查询的时候,要求连带把该目录下的子节点一起查出。以前也做过这种递归的,但是太久没做,一上来,竟然差点给自己搞懵了。所以决定记录下来,供自己以后查阅,也希望可以帮到有需要的朋友。直接上代码。
/**
* 根据父节点 id查询所有子节点id集合(包括自身id)
*
* @param parentId 父节点id
* @param clientId 客户端id
* @return List<Long> 子节点id集合(包括自身id)
*/
@Override
public List<Long> getByParentId(Long parentId, Long clientId) {
//查询出所有目录
List<CatalogueInfo> catalogueInfos = lambdaQuery().eq(CatalogueInfo::getClientId, clientId).
eq(CatalogueInfo::getUseFlag, "1").select(CatalogueInfo::getId, CatalogueInfo::getParentId).list();
//根据目录的parentId, id把所有包含子目录的目录分组为map
ImmutableListMultimap<Long, Long> catalogueInfoMap = catalogueInfos.stream().collect(ImmutableListMultimap.toImmutableListMultimap
(CatalogueInfo::getParentId, CatalogueInfo::getId));