Используйте copy () для заполнения неизменяемого поля - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть класс данных с 3 полями для типа val.

data class Person(
    val id: UUID? = null,
    val name: String,
    val address: String?
)

У меня есть класс Family, который содержит:

    val familyId: UUID? = null,
    val pList: List<Person>

В одном из других классов мне нужно перебираем pList НО мне нужно изменить адресное поле для человека при извлечении его из другой карты на основе идентификатора.

Я знаю, что могу использовать метод copy() для заполнения неизменяемого поля, но я не уверен, как именно это сделать. Я пытался что-то вроде этого, но я не могу работать.

family.pList.forEach {
    it.copy(address = ‘I am getting this value from a map’ )
}

Я думал, что адрес будет заполнен новым значением, но это не так.

Обратите внимание также на поле адреса в список не заполнен.

1 Ответ

2 голосов
/ 19 февраля 2020

Функция copy возвращает новый экземпляр объекта с полями, заполненными как указано при вызове copy. Поэтому вам нужно где-то сохранить новые объекты. Ваш метод, как написано, создает скопированный объект и немедленно его отбрасывает.

Вот что я хотел бы сделать:

val withAddresses = family.pList.map {
    it.copy(address = "I am getting this value from a map")
}

Новая переменная withAddresses ссылается на список объектов Person с заполненным адресным полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...