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

解决树形列表中数值层级累加

一、场景

        记录解决树形列表中,父级中的某个属性需要由自身和子集累加的一个方法(递归)。

二、解决方案

public static void main(String[] args) throws Exception {
        List<NewsCategoryStaticDto> dataList = new ArrayList<>();

        /**
         * 构造树形列表数据
         * 栏目1
         *  栏目1-1
         *      栏目1-1-1
         *  栏目2
         */
        List<NewsCategoryStaticDto> childList1 = new ArrayList<>();
        NewsCategoryStaticDto cDto1 = new NewsCategoryStaticDto();
        cDto1.setId("1-1-1");       //当前层级id
        cDto1.setName("栏目1-1-1");   //层级名称
        cDto1.setPid("1-1");       //父级id
        cDto1.setNewsTotal(new BigDecimal(1)); //需要累加的数量
        childList1.add(cDto1);

        cDto1 = new NewsCategoryStaticDto();
        cDto1.setId("1-1");
        cDto1.setName("栏目1-1");
        cDto1.setPid("1");
        cDto1.setNewsTotal(new BigDecimal(1));
        cDto1.setChildrenList(childList1);
        childList1 = new ArrayList<>();
        childList1.add(cDto1);


        NewsCategoryStaticDto staticDto1 = new NewsCategoryStaticDto();
        staticDto1.setId("1");
        staticDto1.setName("栏目1");
        staticDto1.setPid("0");
        staticDto1.setNewsTotal(new BigDecimal(1));
        staticDto1.setChildrenList(childList1);
        dataList.add(staticDto1);

        NewsCategoryStaticDto staticDto2 = new NewsCategoryStaticDto();
        staticDto2.setId("2");
        staticDto2.setName("栏目2");
        staticDto2.setPid("0");
        staticDto2.setNewsTotal(new BigDecimal(2));
        dataList.add(staticDto2);

        //打印统计前的数据
        System.out.println(JSONArray.toJSONString(dataList));

        for (NewsCategoryStaticDto staticDto : dataList) {
            doStaticTreeNum(staticDto);
        }

        //打印统计后的数据
        System.out.println(JSONArray.toJSONString(dataList));
    }

    /**
     * 统计值累计
     * @param staticDto
     */
    private static void doStaticTreeNum(NewsCategoryStaticDto staticDto) {
        if (null == staticDto) {
            return;
        }

        List<NewsCategoryStaticDto> childrenList = staticDto.getChildrenList();
        if (null == childrenList || childrenList.size() == 0) {
            return;
        }

        for (NewsCategoryStaticDto cDto : childrenList) {
            //递归调用
            doStaticTreeNum(cDto);
            //当前层级的数据 由自身 + 子集
            BigDecimal newTotal = staticDto.getNewsTotal().add(cDto.getNewsTotal());
            staticDto.setNewsTotal(newTotal);
        }

    }

注:

        NewsCategoryStaticDto 这个为我项目中的示例类,仅为示例,实际生产改成自己的就好,只要保证树形结构即可。

        方法很简单,没什么好解释的,就是通过递归调用,不断累加。


http://www.kler.cn/a/442398.html

相关文章:

  • 动态路由vue-router
  • 虚拟拨号技术(GOIP|VOIP)【基于IP的语音传输转换给不法分子的境外来电披上一层外衣】: Voice over Internet Protocol
  • 基于Java的百度AOI数据解析与转换的实现方法
  • nginx 的基础语法学习,零基础学习
  • Windows图形界面(GUI)-QT-C/C++ - QT 窗口属性
  • 计算机网络 (42)远程终端协议TELNET
  • WordPress克隆网站:用户指南
  • Ubuntu下apt 无法安装的解决步骤
  • 【机组】概述精炼考点(冯诺依曼、层次结构、翻译语言、执行程序的过程、基本工作原理、运算器、控制器、存储器)
  • 深入了解AI编程工具Cursor:智能编程的未来
  • MySQL数据库02|去重、条件查询、排序、聚合函数、分组、分页显示
  • 小程序中使用 Vue2 + Vuex 实现数据存储与获取
  • 长短期记忆神经网络(LSTM)介绍
  • rpc设计的再次思考20251215(以xdb为核心构建游戏框架)
  • 如何有效的开展接口自动化测试?
  • 使用Python实现两组数据纵向排序
  • 建立在商用GPT上的简单高效单细胞表示模型
  • C# 识别二维码
  • 【TF-IDF】Hugging Face Model Recommendation System
  • 基础入门-APP应用微信小程序原生态开发H5+Vue技术WEB封装打包反编译抓包点
  • Spring整合Redis基本操作步骤
  • C# 字符串拼接的 7 种方式及性能对比
  • 爬虫抓取的数据如何有效存储和管理?
  • 【YashanDB知识库】YCP单机部署离线升级-rpc升级方式详细步骤
  • Python `str.strip()` 的高级用法详解
  • 为何VisualRules更适合技术人员使用