Kotlin根据id从其他两个对象创建新对象



当前将两个数据类合并为另一个数据类的最佳kotlin惯用方法是什么?

Data class A:
id: Int,
name: String
Data class B:
id: Int,
note: String
Data class C:
data1: A,
data2: B
val result = MutableLiveData<List<C>>()
val array1:List<A> = getA()
val array2:List<B> = getB()

array1和array2有Id,我需要一个基于array1的C类型对象的新列表,我根据array2中的Id找到额外的数据。在Java上,我将迭代array1,在array2中搜索id,并在每次迭代中构造一个新对象,并将其添加到"结果"中,您如何使用Kotlin实现这一点?

到目前为止,我尝试了什么,似乎工作,但它不是kotlin-style:

val array1 = getA()
val array2 = getB()
val resultTemp: ArrayList<C> = arrayListOf()
for (obj in array1 ) {
var noteString = ""
for (obj2 in array2) {
if (obj2.id == obj1.id) {
noteString = obj2.note
}
}
val objC = C(obj.id, obj, noteString)
resultTemp.add(objC)
}
result.value = resultTemp

您的问题不清楚B的实例是否可以在C中为空。如果为真,则简单地

val result = arrayA.map { a -> C(a, arrayB.find { a.id == it.id }) }

其他

val result = arrayA.mapNotNull { a -> arrayB.find { a.id == it.id }?.let { C(a, it) } }

最新更新