lamda8实现转树形结构的方法
public static List<Tree> buildTree(List<Tree> list) {
Map<String, List<Tree>> treeMap = list.stream().collect(Collectors.groupingBy(Tree::getParentId));
list.forEach(tree -> tree.setChildren(treeMap.get(tree.getId())));
return list.stream().filter(v -> v.getParentId().equals(BusinessConstant.ROOT_PID_VALUE)).collect(Collectors.toList());
}
//BusinessConstant.ROOT_PID_VALUE)==0
代码解析:
1.通过list 将pid进行分组
2.分组后的数据格式
将子树放在父树上面
3.将pid为0的放在最上层显示
通过子节点递归查询根节点
/**
* 递归查询节点的根节点
*
* @param pidVal
* @return
*/
private BisAchriveAssemblyStrcture getTreeRoot(String pidVal) {
BisAchriveAssemblyStrcture data = baseMapper.selectById(pidVal);
if (data != null && !"0".equals(data.getParentId())) {
return this.getTreeRoot(data.getParentId());
} else {
return data;
}
}
递归查询所有子节点
/**
* 递归查询所有子节点
*
* @param pidVal
* @param sb
* @return
*/
private StringBuffer getTreeChildIds(String pidVal, StringBuffer sb) {
List<BisAchriveAssemblyStrcture> dataList = baseMapper.selectList(new QueryWrapper<BisAchriveAssemblyStrcture>().eq("parent_id", pidVal));
if (dataList != null && dataList.size() > 0) {
for (BisAchriveAssemblyStrcture tree : dataList) {
if (!sb.toString().contains(tree.getId())) {
sb.append(",").append(tree.getId());
}
this.getTreeChildIds(tree.getId(), sb);
}
}
return sb;
}