首页 > 解决方案 > Kotlin 比较两个列表 - 如果 id 匹配则覆盖它

问题描述

我有两个Object. 两个对象都有一个 id val。我需要通过 id val 检查两个列表,如果 id 相同,则从列表 B 中获取对象并将其覆盖在列表 A 中。在 kotlin 中是否有一种简单的最新方法来实现此结果?

我一直在这里搜索 kotlin 文档和其他比较列表问题,但我没有在文档或此处找到与我的用例匹配的任何内容

标签: kotlin

解决方案


不确定这是多么有效,但它有效......

样本类

data class SomeClass(val id: Int, val someString: String) {

}

fun transformList(firstList: List<SomeClass>, secondList: List<SomeClass>): List<SomeClass> {
    return firstList.map { firstClass ->
        val tempItem = secondList.firstOrNull { it.id == firstClass.id }
        tempItem ?: firstClass
    }
}

基本上,该函数获取两个列表并相互比较每个项目,如果 id 相同,则返回列表 2 中的项目。

fun main() {

    val listOne = listOf<SomeClass>(
        SomeClass(0, "I am 0, from list 1"),
        SomeClass(1, "I am 1, from list 1"),
    )

    val listTwo = listOf<SomeClass>(
        SomeClass(0, "I am 0, from list 2"),
        SomeClass(1, "I am 1, from list 2"),
    )

    println(transformList(listOne, listTwo))

}

输出

 [SomeClass(id=0, someString=I am 0, from list 2), SomeClass(id=1, someString=I am 1, from list 2)]

推荐阅读