树形知识积累

树形知识积累

    • lamda8实现转树形结构的方法
    • 通过子节点递归查询根节点
    • 递归查询所有子节点

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.分组后的数据格式 树形知识积累_第1张图片
将子树放在父树上面
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;
    }

你可能感兴趣的:(java基础内容,后端工具,后端,java)