树形知识积累

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值