当前位置: 首页 > news >正文

级联树SELECTTREE格式调整

步骤:

1、将全部列表设置成Map<Long, List<Obejct>> map的格式,方便查看每个父级对应的子列表,减少循环次数

2、对这个map进行递归,重新进行级联树的集合调整,将子集放置在对应的childs里面。

    public DynamicDeployTable selectDynamicDeployTableTree(String formCode) {
        log.info("selectDynamicDeployTableTree:{}", formCode);
        // 顶级父节点
        DynamicDeployTable returnDynamicDeployTable = null;
        List<DynamicDeployTable> dynamicDeployTableList = selectDynamicDeployTableList(formCode);
        Map<Long, List<DynamicDeployTable>> dynamicDeployTableMap = new HashMap<>();

        for (DynamicDeployTable dynamicDeployTable : dynamicDeployTableList) {
            Long parentId = dynamicDeployTable.getParentId();
            if (parentId == 0L) {
                returnDynamicDeployTable = dynamicDeployTable;
                continue;
            }
            List<DynamicDeployTable> dynamicDeployTables = dynamicDeployTableMap.get(parentId);
            if (ObjectUtil.isNotEmpty(dynamicDeployTables)) {
                dynamicDeployTables.add(dynamicDeployTable);
            } else {
                dynamicDeployTables = ListUtil.createList();
                dynamicDeployTables.add(dynamicDeployTable);
                dynamicDeployTableMap.put(parentId, dynamicDeployTables);
            }
        }
        recursionFn(dynamicDeployTableMap, returnDynamicDeployTable);
        return returnDynamicDeployTable;
    }

    /**
     * 递归列表
     *
     * @param dynamicDeployTableMap 全部列表
     * @param parentDynamicDeployTable 父级对象
     */
    private void recursionFn(Map<Long, List<DynamicDeployTable>> dynamicDeployTableMap, DynamicDeployTable parentDynamicDeployTable) {
        List<DynamicDeployTable> dynamicDeployTables = dynamicDeployTableMap.get(parentDynamicDeployTable.getDynamicId());
        if (ObjectUtil.isEmpty(dynamicDeployTables)) {
            return;
        }
        parentDynamicDeployTable.setChildren(dynamicDeployTables);
        for (DynamicDeployTable deployTable : dynamicDeployTables) {
            recursionFn(dynamicDeployTableMap, deployTable);
        }
    }

2.根据根节点设置

    public List<WmsMaterialClass> getMaterialClassTreeList(WmsMaterialClassVo materialClassVo) {
        log.info("getMaterialClassTreeList,INPUT:{}", JSONObject.toJSONString(materialClassVo));
        List<WmsMaterialClass> initList = getMaterialClassList(materialClassVo);
        if (ObjectUtils.isEmpty(initList)) {
            return ListUtil.createList();
        }
        Map<Long, List<WmsMaterialClass>> matClasChildMap = new HashMap<>();
        for (WmsMaterialClass item : initList) {
            Long parentId = item.getParentId();
            List<WmsMaterialClass> materialClasses = matClasChildMap.get(parentId);
            if (ObjectUtil.isEmpty(materialClasses)) {
                materialClasses.add(item);
                matClasChildMap.put(parentId, materialClasses);
            } else {
                materialClasses.add(item);
            }
        }
        List<WmsMaterialClass> rootNodes = matClasChildMap.get(0L);
        if (ObjectUtils.isEmpty(rootNodes)) {
            return ListUtil.createList();
        }
        for (WmsMaterialClass rootNode : rootNodes) {
            childTree(matClasChildMap,rootNode);
        }
        return rootNodes;
    }

    private void childTree(Map<Long, List<WmsMaterialClass>> matClasChildMap,WmsMaterialClass node) {
        Long nodeId = node.getId();
        List<WmsMaterialClass> children = matClasChildMap.get(nodeId);
        if (!ObjectUtils.isEmpty(children)) {
            node.setChildren(children);
            for (WmsMaterialClass child : children) {
                childTree( matClasChildMap,child);
            }
        }
    }

相关文章:

  • 搭建基于chatgpt的问答系统
  • H.264 和 H.265 中 SPS 字段的异同。
  • 滑动窗口算法-day11(不定长选做)
  • Ollama+ WebUI 部署deepseek-r1
  • qemu分析之 KVM_EXIT_MMIO
  • 【C++标准库类型】深入理解C++中的using声明:从基础到实践
  • 关于ModbusTCP/RTU协议对接Ethernet/IP(CIP)协议的方案
  • 大模型剪枝、量化、蒸馏的区别和联系
  • 自动化测试 | Python+PyCharm+Google Chrome+Selenium 环境安装记录
  • 【MySQL】MySQL服务器——mysqld
  • Java 大视界 -- 基于 Java 的大数据机器学习模型的迁移学习应用与实践(129)
  • Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级
  • 数据可信、隐私可控:CESS 如何打造波卡生态数据新基建?
  • Netty基础—4.NIO的使用简介一
  • laravel项目中使用FFMPeg 剪裁视频
  • 电子电气架构 --- 智能电动汽车概述
  • 【InterruptCallBack】- KRTS C++示例精讲(14)
  • java自带日志系统介绍(JUL)以及和Log4j 2、Logback、SLF4J不同日志工具的对比
  • 【解决方案】RAGFlow部分问题清单及解决方案备忘1
  • 专业视角:set 和 multiset的原理与应用解析
  • php mysql网站开发工资/aso是什么意思
  • 北京市东城区住房城乡建设委网站/百度首页官网
  • html5网站建设微信运营公司织梦模板/搜索引擎在线
  • 做网站需要提交/sem是什么牌子
  • 聊城wap网站制作/现在搜什么关键词能搜到网站
  • 做网站怎么添加背景图片/重庆seo技术分享