Как отмечается в комментариях, это, вероятно, было бы гораздо более эффективным с Map
.
(Точнее, решение карты заняло бы время, пропорциональное сумме длин спискав то время как вложенный цикл for занимает время, пропорциональное их продукту - который увеличивается намного быстрее.)
Вот один из способов сделать это:
val otherFields = getOtherFields().associate{ it.key to it.value }
val myFields = getMyFields().map {
val otherValue = otherFields[it.key]
if (otherValue != null) it.copy(value = otherValue) else it
}
Первыйстрока создает Map
из ключей «других полей» к их значениям.Остальные затем используют его для создания нового списка из «моих полей», подставляя значения из «других полей», где они присутствуют.
Мне пришлось делать предположения о типах & c, так как код ввопрос неполный, но это должно сделать то же самое.Очевидно, что вы можете изменить способ объединения значений, внеся изменения в it.copy()
.
. Вероятно, в зависимости от окружающего кода могут быть еще более простые и эффективные способы.Если вы расширили его до Минимальный, завершенный и проверяемый пример - в частности, тот, который иллюстрирует, как вы уже используете Map
, согласно вашему комментарию - мы могли бы предложить что-то лучшее.