You need to enable JavaScript to run this app. Kotlin中如何为从Firebase获取的Double类型Mutable List编写求和函数
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何为从Firebase获取的Double类型Mutable List编写求和函数

Kotlin 适配Firebase场景的Double类型MutableList求和实现

针对存储Double元素的MutableList求和需求,结合从Firebase拉取数据的常见兼容性问题,可按实际场景选择以下实现:

基础版(已完成类型校验的纯Double列表)

如果你的列表已经完成全量类型校验,确定是无空值、元素统一为Double类型的MutableList<Double>,可直接写自定义扩展函数实现累加逻辑,也方便后续在累加流程中加埋点、阈值校验等定制逻辑:

fun MutableList<Double>.calcSum(): Double {
    var total = 0.0
    for (item in this) {
        total += item
    }
    return total
}
  • 这类实现的计算逻辑和Kotlin标准库内置的sum()方法效果一致,自定义的优势是支持灵活扩展逻辑。
  • 如果没有定制需求,直接调用yourList.sum()也能快速得到结果。

健壮版(适配Firebase原始返回数据)

实际开发中从Firebase Database/Firestore拉取的数值列表,经常存在几类典型问题:列表本身可能为null、元素类型是通用的Any?、混合了Int/Long/Double等不同Number子类、存在null空元素、甚至有存储时类型写错的字符串格式数值。直接用标准库求和很容易触发空指针或者类型转换崩溃,推荐用兼容版的自定义扩展函数,不需要提前做列表类型清洗,直接适配原始返回的数据:

/**
 * 兼容Firebase原始数据的数值列表求和
 * @return 有效元素累加结果,无有效元素时返回0.0
 */
fun MutableList<*>?.calcFirebaseSum(): Double {
    this ?: return 0.0
    var total = 0.0
    for (item in this) {
        item ?: continue
        // 兼容所有Number子类(Int/Long/Double/Float)
        if (item is Number) {
            total += item.toDouble()
        }
        // 兼容字符串格式的数值残留
        if (item is String) {
            runCatching { total += item.toDouble() }
        }
    }
    return total
}

使用方式非常简单,不管从Firebase解析出的列表是啥结构,直接调用即可:

// 典型Firebase拉取的混合类型列表
val rawList = mutableListOf<Any?>(12.3, 5, null, 2.7, "10")
val total = rawList.calcFirebaseSum()
// 最终计算结果为 30.0

精度优化场景

如果是计算金额等对精度要求高的场景,避免Double累加带来的浮点误差,可以把累加逻辑替换为BigDecimal实现:

fun MutableList<*>?.calcFirebaseMoneySum(): BigDecimal {
    this ?: return BigDecimal.ZERO
    var total = BigDecimal.ZERO
    for (item in this) {
        item ?: continue
        when (item) {
            is Number -> total = total.add(BigDecimal.valueOf(item.toDouble()))
            is String -> runCatching {
                total = total.add(BigDecimal(item))
            }
        }
    }
    return total
}

内容的提问来源于stack exchange,提问作者Abugewa Zenith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 04:24:03