#kotlin #collections
Вопрос:
У меня есть 2 списка с объектами одного и того же типа:
[{"id":1, "val": "A"}, {"id":2, val:"B"}]
и
[{"id":2, "val": "C"}, {"id":3, val:"D"}]
Мне нужно объединить список 2 в список 1 определенным образом: измените существующий объект в 1 с новым значением объекта с тем же идентификатором из 2, если он существует.
Для этого примера результат должен быть таким:
[{"id":1, "val": "A"}, {"id":2, val:"C"}]
Есть ли какой-либо эффективный и разумный способ справиться с этим в Котлине?
Ответ №1:
fun main() {
data class Obj(val id: Int, val value: String)
val first = listOf(Obj(1, "A"), Obj(2, "B"))
val second = listOf(Obj(2, "C"), Obj(3, "D"))
val buf = second.associateBy { it.id }
val result = first.map { buf[it.id] ?: it }
println(result)
}
Комментарии:
1. Замените
groupBy
наassociateBy
, и ваше решение будет работать должным образом 😉