gpt4 book ai didi

kotlin - 如何根据 ID 合并两个对象列表?

转载 作者:行者123 更新时间:2023-12-02 12:16:09 24 4
gpt4 key购买 nike

我有两个 list 。一个叫oldList并包含旧数据,第二个称为 updateList并包含一组更新。

我想用这些规则创建一个新列表:

  • oldList 中获取所有数据
  • 使用唯一的 id 附加所有更新
  • 如果 id oldData 中已存在更新项目的,替换它

  • 我想出了一个简单的代码:

    项目.kt
    data class Item (val id: String, val text: String)

    Main.kt
    fun main() {

    val oldList: List<Item> = listOf(
    Item("aaa1", "aaa2"),
    Item("bbb1", "bbb2"),
    Item("ddd1", "ddd2"))

    val updateList: List<Item> = listOf(
    Item("aaa1", "aaa3"),
    Item("ccc1", "ccc2"))

    val resultList = oldList.toMutableList()

    for (item in updateList) {
    val index = oldList.indexOfFirst { it.id == item.id }
    if (index < 0) {
    resultList.add(item)
    } else {
    resultList[index] = item
    }
    }

    println(resultList)
    }

    这工作正常,但我可以想象它效率低下,而且可能还有一些不错的 Kotlin成语。有更好的解决方案吗?

    最佳答案

    如果原始顺序无关紧要,您可以组合列表,将新值首先放在 distinctBy 中。称呼:

    val resultList = (updateList + oldList).distinctBy(Item::id)
    如果顺序与您描述的完全一样,您可以在组合它们之前将两个列表转换为映射。与 + 结合使用 map 时,第二个 Map 中的项目优先,但保留第一个 Map 的顺序。
    val resultList = 
    (oldList.associateBy(Item::id) + updateList.associateBy(Item::id)).values.toList()

    关于kotlin - 如何根据 ID 合并两个对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58803448/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com