Более идиоматический способ инициализации этого списка котлинов? - PullRequest
0 голосов
/ 27 июня 2018

Я хочу иметь неизменяемый список, так как мне не нужна изменчивость, поэтому он может вызывать ошибки. Однако список lateinit var объявлен на уровне класса.

Я хочу изначально заполнить список значениями из цикла, примерно так:

for (items in someOtherCollection) {
    val itemToAdd = doSomeProcessingOnThisData()
    list.add(itemToAdd)
}

Однако, поскольку список неизменен, я не могу позвонить add(). Есть ли лучший способ инициировать такой список, не добавляя все значения во второй изменяемый список, а затем назначая его неизменному списку?

Мое текущее решение таково, но оно кажется неэффективным:

val tmpList = mutableListOf<Data>()
foos.forEach() {
    val itemToAdd = doSomeProcessing()
    foos.add(itemToAdd)
}
this.list = tmpList

1 Ответ

0 голосов
/ 27 июня 2018

Если вы хотите создать новый список, обрабатывающий некоторые данные из другой коллекции, попробуйте это:

this.list = someOtherCollection.map {
    doSomeProcessing()
}

Прочитайте это для лучшего понимания: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map.html

...