В вашем первом примере:
var userList = mutableListOf<User>()
var nameList= userList.map { it.name }
Вопрос "Какого типа nameList
?"имеет простой ответ: List<String>
.Итак, позвольте мне задать вам аналогичный вопрос: какой тип withoutAgeList
?Ответ на этот вопрос сообщает ответ на ваш вопрос.
Возможно, пользователь без свойства age является отдельным классом AgelessUser
, что означает withoutAgeList
типа List<AgelessUser>
.В этом случае я предлагаю либо конструктор, либо фабричную функцию, которая строит AgelessUser
из User
, и вам нужен один из них:
val withoutAgeList = userList.map { AgelessUser(it) } // constructor
val withoutAgeList = userList.map { agelessUserOf(it) } // factory
В качестве альтернативы, возможно, свойство age
в User
допускает обнуление и неизменность, и вы хотите представлять пользователей без возраста как обычные User
, где age=null
.В этом случае вы можете скопировать пользователей и переопределить поле возраста
// TODO: pass all the other fields too
val withoutAgeList = userList.map { User(it.name, null) }
Предполагая, что Users
является data class
, мы можем избежать явного присвоения имен всем полям, используя copy()
:
val withoutAgeList = userList.map { it.copy(age = null) }
Может быть, свойство age может быть обнуляемым и изменяемым - и вы действительно хотите поменять пользователей на месте, а не копировать их.Это несколько рискованно, и я не рекомендую делать это таким образом, если вы действительно не знаете, что делаете, хотя.
userList.forEach { it.age = null }
// They're actually the same list!
val withoutAgeList = userList