kotlin - Kotlin 比较两个列表 - 如果 id 匹配则覆盖它
问题描述
我有两个Object
. 两个对象都有一个 id val。我需要通过 id val 检查两个列表,如果 id 相同,则从列表 B 中获取对象并将其覆盖在列表 A 中。在 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)]
推荐阅读
- qt - 使我在 QListview 中列出的项目在单击时发出信号
- amazon-web-services - Amazon S3 图像原件在特定日期之前死亡
- r - 正确使用 group_by 和 summarise() 函数?
- java - neo4j-jdbc 驱动程序最小可行片段,不确定如何解决依赖关系
- python-3.x - 如何在vps中同时运行多个文件?
- javascript - ng-click 未在 ng-repeat 内触发
- excel - VLOOKUP 不理解数字
- typescript - 多余的财产检查有什么帮助?
- android - Android 错误“合并失败”,但并非无处不在的常见错误
- r - 在 R 中绘制轮廓,每个聚类一个不同的纹理