首页 > 其他分享 >树:向下递归,向上汇总

树:向下递归,向上汇总

时间:2023-02-08 18:12:07浏览次数:40  
标签:node childs 递归 launchQuantity 汇总 listEditAmount orZero periodAmounts 向下

工作代码如下

fun List<MeasureLedgerModel>.sumUp(): List<MeasureLedgerModel> {

        val pMap = this.filter { it.parentId != null }.groupBy { it.parentId!! }
        //获取顶层节点
        val top = this.filter { it.parentId == null }
        //向下遍历
        fun  calculateChildren(node:MeasureLedgerModel):MeasureLedgerModel{

            val childs = pMap[node.id]

            if(childs.isNullOrEmpty()) return node

            var launchQuantity = node.launchQuantity.orZero()
            var listEditQuantity = node.listEditQuantity.orZero()
            var listEditAmount = node.listEditAmount.orZero()
            var periodAmounts = node.periodAmounts


            childs.forEach {
                val childs = calculateChildren(it)
                launchQuantity += childs.launchQuantity.orZero()
                listEditQuantity += childs.listEditQuantity.orZero()
                listEditAmount += childs.listEditAmount.orZero()
                childs.periodAmounts.forEachIndexed { index, value ->
                    periodAmounts[index] = periodAmounts[index].orZero().plus(value.orZero())
                }
            }
            node.launchQuantity = launchQuantity
            node.listEditQuantity = listEditQuantity
            node.listEditAmount = listEditAmount
            node.periodAmounts = periodAmounts
            return node
        }

        top.forEach {
            calculateChildren(it)
        }
        return this
    }

标签:node,childs,递归,launchQuantity,汇总,listEditAmount,orZero,periodAmounts,向下
From: https://www.cnblogs.com/Acaak/p/17102836.html

相关文章

  • 2023更新目标成本会出现的问题汇总
    如果对自己的核查能力不够自信,不建议用自动导入的功能---BySheZQ1.无法保存的问题。问题产生的原因:部分同事想边做边保存,所以录完一点点保存就会出现这个问题。......
  • 直播平台搭建,elementui的导航路由递归报错解决
    直播平台搭建,elementui的导航路由递归报错解决menu.vue-父组件: <template>  <div>   <el-menu :default-active="activeIndex" background-color="#0f......
  • 使用非递归来实现递归
    我们应该遇到过很多次类似的题目了吧:如何将一个递归函数使用非递归的方式实现..今天突然想到一个通用解,就是可以在循环中模拟函数调用的方式来实现.调用栈以计算1~......
  • HTTP协议调试工具汇总 AnyProxy whistle
     Java1.BurpSuite英国PortSwigger团队开发,用起来很顺手,安全行业占有率很高,闭源、收费。最近又出了款企业版:独特的办公环境:2.Charles俗称花瓶,Mac下前端工程师......
  • Zabbix“专家坐诊”第180期问答汇总
    问题一Q:老师,请教个问题,zabbix通过自动发现扫描网段,然后添加主机,有没有什么办法区分路由器或者交换机类型的方法,这样才能把交换机模板或者路由器模板挂给对应的主机A:不多的......
  • Java 使用递归构建树
    publicclassMenuTree1{/***构建结束的树*/privatestaticList<Menu>menuList;/***构建树*@parammenuId树的根节点id0:代表顶级......
  • Dajngo开发常见问题汇总 -- Serializer篇
    常见问题一、Django枚举类型扩展方法(Model.get_FOO_display())问题#标准的枚举写法EXPERIENCE_CHOICES=((1,'应届毕业生'),(2,'3年及以下'),.........
  • Dajngo开发常见问题汇总 -- Model设计篇
    verbose_name可以作为第一个参数传入,使书写更加工整和有序;name=models.CharField('类别名',default="",max_length=30,help_text="类别名")请尽量为每个model和f......
  • 2023计算机领域顶会(A类)以及ACL 2023自然语言处理(NLP)研究子方向领域汇总
    2023年的计算语言学协会年会(ACL2023)共包含26个领域,代表着当前前计算语言学和自然语言处理研究的不同方面。每个领域都有一组相关联的关键字来描述其潜在的子领域,这些子领......
  • 20-方法递归
    publicclassDemo06{publicstaticvoidmain(String[]args){System.out.println(f(5));}//定义一个方法阶乘publicstaticintf(i......