Создать список объектов со сгенерированным значением ключа в Kotlin - PullRequest
0 голосов
/ 08 апреля 2020

Новое в Котлине; Мне нужно получить список объектов класса HeightModel из функции

class HeightModel(id: Int, height: Int)

Я использую приведенный ниже код. но получаю пустой список

var i = 1
var j = 145
val li = emptyList<HeightModel>()
while(i < 46 && j < 191){
    li.toMutableList().add(HeightModel(i, j))
    i ++
    j ++
 }
return li

Вместо этого я получаю пустой список. Мой ожидаемый результат будет

listOf(HeightModel(1, 145), HeightModel(2, 146) .....HeightModel(46, 190))

Помощь с благодарностью

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Проблема в том, что li.toMutableList() возвращает новый экземпляр списка и, таким образом, li остается пустым списком.

На самом деле emptyList() возвращает неизменный пустой список. Таким образом, решения на самом деле следующие:

var i = 1
var j = 145
val li = mutableListOf<HeightModel>()
while(i < 46 && j < 191){
    li.add(HeightModel(i, j))
    i ++
    j ++
 }
return li

или просто val li = ArrayList<HeightModel>()

1 голос
/ 08 апреля 2020

Это идиоматизм c Kotlin для достижения того, что вы хотите:

data class HeightModel(val id: Int, val height: Int)

fun main() {
    val ids = 1..45
    val heights = 145..190
    val heightModelList = (ids zip heights).map { HeightModel(it.first, it.second) }
}

Если вы хотите узнать больше о функциях, используемых в этом коде, пожалуйста, прочитайте о Классы данных , Диапазоны и прогрессии и zip функционируют в Kotlin. Если вы хотите кодировать в Kotlin, полезно изучить более функциональный способ обработки данных, как я делал с функцией map выше.

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