Java由根目录遍历到子目录,由子节点遍历回溯到根目录

1.需求说明:把整个目录树包括目录下的叶子节点(数据),一次性返回。

思路:

a.首先获取到根目录的信息,然后查询到根目录下的数据。

b.由根目录找到根目录下的子目录,然后递归调用

    public List<DataClassInfoVo> query(List<DataClassInfoVo> dataObjectClassListOneSort){
        for(int i=0;i<dataObjectClassListOneSort.size();i++){
            DataClassInfoVo dataClassInfoVo = dataObjectClassListOneSort.get(i);
            //一级目录的id
            String class_id = dataClassInfoVo.getCLASS_ID();
            //一级目录下的右侧数据
            List<DataObjectInfo> dataObjectInfoList = dataObjectInfoMapper.selectByClassId(class_id);
            //查询一级目录下的子目录
            List<DataClassInfoVo> dataObjectClassListSon = dataObjectClassMapper.selectClassListLv2(class_id);
             //一个简单的排序过程
            dataObjectClassListSon=serviceCatalogBaseSort(dataObjectClassListSon);

            //递归调用
            List<DataClassInfoVo> dataClassInfoVos = query(dataObjectClassListSon);
            dataClassInfoVo.setChildren(dataClassInfoVos);
            dataClassInfoVo.setDataObjectInfoList(dataObjectInfoList);
        }
        return dataObjectClassListOneSort;
    }

2.需求说明:模糊搜索数据,获取到数据(可能多条)所在的目录,然后由当前目录,回溯到根目录

  使用场景:目录树搜索具体数据,只返回当前目录和父目录,直到根目录

思路:

a.通过字段模糊搜索到数据得到List<Object>数据集合

b.遍历List<Object>各个对象,然后由各个对象递归遍历得到父目录直到根目录,结果放入LinkedHashSet中

c.获取根目录和非根目录,由非根目录找到是在根目录下的一级目录,接着递归调用

//模糊搜索得到数据集合,DataObjectInfo中包含目录id
List<DataObjectInfo> dataObjectInfoList = dataObjectInfoMapper.selectByObjectName(objectName);
//由数据集合得到目录集合,调用transferList方法组装数据
    public List<DataClassInfoVo> qryDataClassInfoVo(List<DataObjectInfo> dataObjectInfoList){
        List<DataClassInfoVo> dataClassInfoVo = Lists.newArrayList();
        Set<DataObjectClass> classIdList = new LinkedHashSet<>();
        for(int i=0;i<dataObjectInfoList.size();i++){
            DataObjectInfo dataObjectInfo = dataObjectInfoList.get(i);
            String class_id = dataObjectInfo.getCLASS_ID();
            DataObjectClass dataObjectClass = dataObjectClassMapper.selectClassListLV3(class_id);
            qryClass(classIdList,dataObjectClass);
            classIdList.add(dataObjectClass);
        }
        //classIdList组装成List<DataClassInfoVo>格式
        List<DataClassInfoVo> dataClassInfoVoList1=Lists.newArrayList();
        List<DataClassInfoVo> dataClassInfoVoList = transferList(classIdList,dataClassInfoVoList1,dataObjectInfoList);
        return dataClassInfoVoList;
    }
//获取一级目录,和非一级目录    
public List<DataClassInfoVo> transferList(Set<DataObjectClass> classIdList, List<DataClassInfoVo> dataClassInfoVoList,List<DataObjectInfo> dataObjectInfoList) {
        //获取一级目录
        List<DataObjectClass> rootClass = classIdList.stream().filter(dataObjectClass -> Assert.isEmpty(dataObjectClass.getPARENT_CLASS_ID())).collect(Collectors.toList());
        //获取非一级目录
        List<DataObjectClass> sonClass = classIdList.stream().filter(dataObjectClass -> Assert.notEmpty(dataObjectClass.getPARENT_CLASS_ID())).collect(Collectors.toList());
        rootClass.forEach(dataObjectClass -> {
            DataClassInfoVo dataClassInfoVo = new DataClassInfoVo();
            BeanUtil.copyProperties(dataObjectClass,dataClassInfoVo);
            qrySon(dataClassInfoVo,sonClass,dataObjectInfoList);
            dataClassInfoVoList.add(dataClassInfoVo);
        });

        return dataClassInfoVoList;
    }
//得到当前目录下的子目录,并组装数据    
public void qrySon(DataClassInfoVo dataClassInfoVo,List<DataObjectClass> sonClass,List<DataObjectInfo> dataObjectInfoList){
        List<DataObjectClass> dataObjectClassList = sonClass.stream().filter(dataObjectClass -> dataObjectClass.getPARENT_CLASS_ID().equals(dataClassInfoVo.getCLASS_ID())).collect(Collectors.toList());
        if(Assert.notEmpty(dataObjectClassList)){
            List<DataClassInfoVo> sonList=Lists.newArrayList();
            dataObjectClassList.forEach(dataObjectClass -> {
                DataClassInfoVo son = new DataClassInfoVo();
                BeanUtil.copyProperties(dataObjectClass,son);
                qrySon(son,sonClass,dataObjectInfoList);
                sonList.add(son);
            });
            dataClassInfoVo.setChildren(sonList);
        }
        List<DataObjectInfo> collect = dataObjectInfoList.stream().filter(info -> info.getCLASS_ID().equals(dataClassInfoVo.getCLASS_ID())).collect(Collectors.toList());
        dataClassInfoVo.setDataObjectInfoList(collect);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值