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

Kotlin集合操作:按双向交易计算个人间最终金额

Kotlin集合处理:计算用户间最终交易余额

解决方案代码

先修正数据类命名以符合Kotlin规范,再实现需求逻辑:

// 修正类名大驼峰(Kotlin编码规范)
data class Transaction(val SenderName: String, val ReceiverName: String, val Amount: Int)
data class NewObject(val reference_person: String, val Other_person: String, val FinalAmount: Int)

val transactions = listOf(
    Transaction("Rahul","Ravi",10000),
    Transaction("Rahul","Ravi",-500),
    Transaction("Ravi","Rahul",1000)
)

fun main() {
    // 1. 预处理:获取每对(发送方-接收方)的总交易金额
    val pairTotal = transactions.groupBy { it.SenderName to it.ReceiverName }
        .mapValues { (_, txList) -> txList.sumOf { it.Amount } }

    // 2. 获取所有参与交易的唯一用户
    val allUsers = transactions.flatMap { listOf(it.SenderName, it.ReceiverName) }.distinct()

    // 3. 生成最终结果列表
    val finalList = allUsers.flatMap { referenceUser ->
        allUsers.filter { it != referenceUser }.map { otherUser ->
            // 计算参考用户相对于对方的最终金额:发送给对方的总和 - 收到对方的总和
            val sent = pairTotal[referenceUser to otherUser] ?: 0
            val received = pairTotal[otherUser to referenceUser] ?: 0
            NewObject(referenceUser, otherUser, sent - received)
        }
    }

    // 验证输出
    finalList.forEach { println(it) }
}

逻辑说明

  1. 预处理交易对总和:用groupBy按「发送方-接收方」分组,再通过mapValues计算每组的金额总和,得到一个可快速查询的单向交易总额映射表。
  2. 收集所有用户:通过flatMap收集所有交易涉及的发送方和接收方,再用distinct去重,确保覆盖所有参与交易的用户。
  3. 生成最终结果:遍历每个用户作为参考视角,再遍历其他交易对手,计算参考方的最终余额(自己发给对方的总额减去对方发给自己的总额),最后封装成NewObject组成结果列表。

运行结果

执行代码后将输出:

NewObject(reference_person=Rahul, Other_person=Ravi, FinalAmount=8500)
NewObject(reference_person=Ravi, Other_person=Rahul, FinalAmount=-8500)

内容的提问来源于stack exchange,提问作者Ravi.Dudi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:10:18