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
相关产品推荐
相关产品推荐

