public List<DictVo> getDictVoByPid(Long pId) {
List<SysDict> sysDicts = sysDictMapper.selectList(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getPid, pId).eq(SysDict::getIsDeleted, YesOrNoEnum.NO.getCode()));
List<DictVo> dictVoList = new ArrayList<>();
for(SysDict temp: sysDicts){
DictVo dictVo ;
dictVo = new DictVo();
BeanUtils.copyProperties(temp, dictVo);
dictVoList.add(dictVo);
}
return dictVoList;
}
public List<DictVo> selectDictVoList() {
List<SysDict> sysDicts = sysDictMapper.selectList(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getIsDeleted, YesOrNoEnum.NO.getCode()));
List<DictVo> dictVoList = new ArrayList<>();
for(SysDict temp: sysDicts){
DictVo dictVo = new DictVo();
BeanUtils.copyProperties(temp, dictVo);
dictVoList.add(dictVo);
}
return dictVoList;
}
/**
* 获取物料分类树结构
* @return
*/
@Override
public List<DictVo> getDictVoTree() {
// 查询所有节点
List<DictVo> voList = selectDictVoList();
// 查询最高父节点
List<DictVo> rootNode = getDictVoByPid(0L);
// 设置子节点
rootNode.forEach(info -> {
List<DictVo> childrenList = this.getChildren(voList,info.getId());
info.setChildrenDictVoList(childrenList);
});
return rootNode;
}
/**
* 获取根据父节点ID获取子节点
* @param allNode
* @param parentId
* @return
*/
public List<DictVo> getChildren(List<DictVo> allNode, Long parentId){
// 使用Linq匹配出传入父节点的下一级子节点
List<DictVo> infoList = allNode.stream().filter(t -> t.getPid().equals(parentId)).collect(Collectors.toList());
//Linq.of(allNode).where(item->item.getMaterialtypeParent().equals(parentId)).toList();
/**
* 2023.02.03 更新
* 这里可以用流处理,省去引入依赖
*/
// List<BasMaterialType> basDischargeInfoList = allNode.stream().filter(item -> item.getMaterialtypeParent().equals(parentId)).collect(Collectors.toList());
if (infoList.size()==0){
return new ArrayList<>();
}
//递归下一级
infoList.forEach(basDischargeInfo -> {
basDischargeInfo.setChildrenDictVoList(getChildren(allNode,basDischargeInfo.getId()));
});
return infoList;
}
Java后端将查询数据组装成树结构
最新推荐文章于 2024-05-03 09:12:33 发布
本文介绍了如何在Java后端通过LambdaQueryWrapper查询数据库数据,然后使用递归方法将其转换为树形结构,以展示物料分类。作者在CSDN博客中分享了查询数据并生成树形结构的具体代码片段。
摘要由CSDN通过智能技术生成