Simon Lin
01/19/2021, 8:38 AMdata class DataA(
val id: String,
val fieldA: Int
)
data class DataB(
val id: String,
val fieldB: String
)
data class DataC(
val id: String,
val fieldA: Int,
val fieldB: String
)
fun main() {
val listA = listOf(
DataA("2", 2),
DataA("1", 1),
DataA("3", 3)
)
val listB = listOf(
DataB("3", "C")
DataB("1", "A"),
DataB("2", "B"),
)
val listC = doSomeMagic(listA, listB)
print(listC)
// result: [DataC(id=1, fieldA=1, fieldB=A), DataC(id=2, fieldA=2, fieldB=B), DataC(id=3, fieldA=3, fieldB=C)]
}
Simon Lin
01/19/2021, 8:48 AMalbertosh
01/19/2021, 8:49 AMfun doSomeMagic(l1: List<DataA>, l2: List<DataB>): List<DataC> {
val m1 = l1.groupBy { it.id }.mapValues { it.value[0] }
return l2.map { DataC(it.id, m1[it.id]?.fieldA!!, it.fieldB)}
}
Animesh Sahu
01/19/2021, 9:31 AMfun doSomeMagic(listA: List<DataA>, listB: List<DataB>): List<DataC> =
listA.map { a -> DataC(a.id, a.fieldA, listB.first { it.id == a.id }.fieldB) }
Animesh Sahu
01/19/2021, 9:33 AM>1000
, sorting listB may help, by making complexity O(nlogn) compared to O(n^2).Nir
01/19/2021, 3:02 PMAnimesh Sahu
01/19/2021, 3:03 PMAnimesh Sahu
01/19/2021, 3:04 PMNir
01/19/2021, 3:05 PMval listC = listA.associate { it.id to it }.run {
listB.map { DataC(it.id, getValue(it).fieldA, it.fieldB) }
}
Nir
01/19/2021, 3:07 PM