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

Kotlin中高效对比划分两个集合的最优方案(应急数据场景)

问题描述

我目前正在开发一个Kotlin项目,用于自动化维护应急位置数据。项目中需要对比两个JSON对象集合,以确定需执行的新增、更新、删除操作:

  • 集合A为现有数据,集合B为任务传入的新数据
  • 两个集合的对象结构不完全一致,但拥有可关联的唯一ID

操作规则:

  • 仅存在于A中的数据:调用删除接口
  • 仅存在于B中的数据:调用创建接口
  • 同时存在于A和B中的数据:调用更新接口

每个操作都涉及第三方API的HTTP请求,暴力遍历集合的方式因为要部署在AWS Lambda中,性能无法满足要求,想知道Kotlin中处理这类问题的最高效方案是什么?

最终实现方案

我最终采用了@broot提供的解决方案,不过因为两个列表的对象属于不同类,额外增加了定义公共接口的步骤。

类结构定义

interface HasUid {
    val uid: String
}

data class OldData(val id: String, val name: String, val mac: String) : HasUid {
    override val uid: String
        get() = name
}

data class NewData(val identifier: String, val display_name: String, val mac: String) : HasUid {
    override val uid: String
        get() = display_name
}

调用示例

val (toDelete, toAdd, toUpdate) = diffSetsBy(oldDataList, newDataList, HasUid::uid)
println("to update: " + toUpdate.size)
println("to add: " + toAdd.size)
println("to delete: " + toDelete.size)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:52:39