我有 2 个列表,其中包含 x 个对象,例如:
data class Model(
var token: String = "",
var id: String = "",
var name: String = "",
var image: Int = 0,
)
数组已初始化并填充,另一个列表也有 x 个对象,其中也包含第一个列表的对象,但其属性具有不同的值!
我想要做的是,如果第二个数组具有相同的 object.name,则更改第一个数组的属性
var arr1 = ArrayList<Model>() // locale
var arr2 = ArrayList<Model>() // from db
例如我得到的第一个数组
[Model(name = "David", token = "" , image = 0)]
我得到的第二个数组
[Model(name = "David", token = "1asd5asdd851", image = 1)]
如何使第一个数组获取丢失的标记?
我尝试使用 .filter{}
和 .map{}
。 groupBy {}
几个小时,因为 Name 是唯一相同的属性,但我越来越困惑。
最佳答案
我们可以首先使用 associateBy() 按名称对第二个数组进行分组然后迭代第一个数组并重新分配属性:
val arr2ByName = arr2.associateBy { it.name }
arr1.forEach { item1 ->
arr2ByName[item1.name]?.let { item2 ->
item1.token = item2.token
item1.image = item2.image
}
}
或者,如果您不需要修改 arr1
中的项目,但创建另一个数组,则可以使用 arr1
和 arr2
中的项目code>,那么就容易多了:
val arr3 = arr1.map { arr2ByName[it.name] ?: it }
关于kotlin - 根据属性对象将列表的属性合并到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70841302/