Как добавить значения в изменяемый список, чтобы затем добавить в неизменяемый - PullRequest
0 голосов
/ 02 апреля 2019

Поэтому я использую пользовательский SDK, где мне нужно ввести диапазон чисел, скажем, от 1 до 100 в виде строк в коллекцию listOf. Есть ли какой-нибудь эффективный способ сделать это, скажем, для цикла for? У меня почти нет опыта работы с kotlin, поэтому всяческая помощь приветствуется!

Ответы [ 3 ]

2 голосов
/ 02 апреля 2019

Вы не можете «добавить в неизменяемый [список]».

Если вы уже используете изменяемый список где-то, то вы можете использовать toList() (как в ответе @ anber), чтобы получитьверсия только для чтения, или вы также можете напрямую передать ее функции, ожидающей List (если вы не измените список, когда фреймворк его использует).

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

val list = (1..100).map { "$it" }

Обратите внимание на синтаксис диапазона Котлина.Таким образом, вам не нужно использовать цикл for, и вам даже не нужно использовать временный изменяемый список.Изменчивый материал не очень идиоматичен в Kotlin, если только это не часть бизнеса.

Вы также можете использовать it.toString() вместо строкового шаблона, но я считаю, что он более читабелен с шаблоном.

0 голосов
/ 02 апреля 2019

Есть функция, которая выглядит как конструктор, но на самом деле это функция верхнего уровня.Вы можете использовать его следующим образом:

val l = List(99) { "${it + 1}" }

l будет иметь тип List<String> (неизменяемый).

0 голосов
/ 02 апреля 2019

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

val mutableList = mutableListOf<String>()
for (i in 0..10) {
    mutableList.add(i.toString())
}
val immutableList = mutableList.toList()
...