You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何将List<UserData>集合累加合并为单个UserData对象

实现代码(Kotlin)

fun mergeUserDataList(userDataList: List<UserData>): UserData {
    // 空集合边界处理,可根据业务需求调整为返回null或默认对象
    if (userDataList.isEmpty()) {
        throw IllegalArgumentException("待合并的UserData列表不能为空")
    }

    // 1. 取最早的firstSale、最晚的lastSale
    val mergedFirstSale = userDataList.minOf { it.firstSale }
    val mergedLastSale = userDataList.maxOf { it.lastSale }

    // 2. 所有元素取值一致的字段,直接取首条数据对应值即可
    val mergedPtuCodesList = userDataList.first().ptuCodesList
    val mergedCurrency = userDataList.first().currency

    // 3. 合并taxList:按itemDescription分组后求和同组金额
    val mergedTaxList = userDataList
        .flatMap { it.taxList }
        .groupBy { it.itemDescription }
        .map { (description, itemList) ->
            ItemSale(description, itemList.sumOf { it.itemsTotalValue })
        }

    // 合并salesList逻辑和taxList完全一致
    val mergedSalesList = userDataList
        .flatMap { it.salesList }
        .groupBy { it.itemDescription }
        .map { (description, itemList) ->
            ItemSale(description, itemList.sumOf { it.itemsTotalValue })
        }

    // 4. 累加所有数值字段
    val mergedTaxTotal = userDataList.sumOf { it.taxTotal }
    val mergedSaleTotal = userDataList.sumOf { it.saleTotal }
    val mergedCanceledOrderCount = userDataList.sumOf { it.canceledOrderCount }
    val mergedCanceledSaleTotal = userDataList.sumOf { it.canceledSaleTotal }

    // 构造返回合并后的对象
    return UserData(
        firstSale = mergedFirstSale,
        lastSale = mergedLastSale,
        ptuCodesList = mergedPtuCodesList,
        taxList = mergedTaxList,
        salesList = mergedSalesList,
        taxTotal = mergedTaxTotal,
        saleTotal = mergedSaleTotal,
        currency = mergedCurrency,
        canceledOrderCount = mergedCanceledOrderCount,
        canceledSaleTotal = mergedCanceledSaleTotal
    )
}

调用方式

val allUserData = dbRepository.getAllUsersData()
val mergedUserData = mergeUserDataList(allUserData)

注意事项

  • 如果使用的Kotlin版本低于1.4,sumOf、minOf、maxOf方法可替换为对应兼容API,比如minByOrNull { it.firstSale }!!替代minOf
  • 代码默认输入列表的ptuCodesList、currency取值完全一致,若业务场景存在不一致可能,可在边界校验步骤增加对应断言逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:48:05