Объединение двух списков одного и того же типа в Котлине

#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 , и ваше решение будет работать должным образом 😉