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

Kotlin如何比对两个列表并按id匹配覆盖列表A中的元素

Kotlin 按ID合并两个列表并覆盖的简洁实现

基础实现(覆盖匹配ID,保留原列表A顺序)

先把B转为以ID为键的映射,遍历A时直接查表替换即可,时间复杂度O(n+m),远优于嵌套遍历方案。

// 示例实体类,替换为你自己的对象类型即可
data class YourObject(val id: Long, /* 其他属性 */)

val listA: List<YourObject> = // 你的列表A
val listB: List<YourObject> = // 你的列表B

// 核心逻辑
val bIdMap = listB.associateBy { it.id }
val mergedList = listA.map { bIdMap[it.id] ?: it }

拓展场景

场景1:需要同时保留列表B中独有的元素

利用Map的plus操作符天然覆盖相同键的特性实现:

val mergedList = (listA.associateBy { it.id } + listB.associateBy { it.id })
    .values
    .toList()

该写法会优先保留B中同ID的对象,同时将B独有的ID对象追加到结果末尾。

场景2:需要原地修改可变列表A

如果使用MutableList不需要生成新列表,可直接调用replaceAll实现原地替换:

val bIdMap = listB.associateBy { it.id }
listA.replaceAll { bIdMap[it.id] ?: it }

注意事项

  • 若ID字段为可空类型,需先过滤掉ID为空的元素避免映射异常:listB.filter { it.id != null }.associateBy { it.id }
  • 该方案适配所有Kotlin 1.3+版本,属于标准库原生API,无需引入第三方依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:04