Як ініціалізувати List <T> у Kotlin?


83

Я бачу, що Котлін має List<out E>колекцію, і мені було цікаво про різні способи її ініціалізації. На Java я міг написати:

List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");

Як я можу досягти того ж у Котліні?


10

Відповіді:


132

listOf функція вищого рівня на порятунок:

val geeks = listOf("Fowler", "Beck", "Evans")

11
Виклик listOf без будь-якого параметра дає вам порожній список або просто викликайте emptyList, щоб зробити його більш читабельним.
frogcoder

4
Також є arrayListOf
Greg T

Це можна змінити для подальшої модифікації?
Ігор Ганапольський

1
@IgorGanapolsky Тип, що повертається, є лише для читання List<T>, тому не слід вважати, що його можна змінювати.
Ілля

16

Як прихильні відповіді Іллі, так і gmariotti є добрими і правильними. Однак деякі альтернативи поширені в коментарях, а деякі взагалі не згадуються.

Ця відповідь включає короткий виклад вже поданих, поряд із роз’ясненнями та кількома іншими альтернативами.

Незмінні списки ( List)

Незмінні списки або списки лише для читання - це списки, до яких не можна додавати чи видаляти елементи.

  • Як зазначає Ілля, listOf()часто робить те, що ти хочеш. Це створює незмінний список, подібний до Arrays.asListJava.
  • Як зазначає frogcoder у коментарі, emptyList()робить те саме, але, природно, повертає порожній список.
  • listOfNotNull()повертає незмінний список, виключаючи всі nullелементи.

Змінні списки ( MutableList)

Змінні списки можуть містити додані або видалені елементи.

  • gmariotti пропонує використовувати mutableListOf(), що, як правило, є тим, що вам потрібно, коли вам потрібно додати або видалити елементи зі списку.
  • Greg T дає альтернативу, arrayListOf(). Це створює змінний ArrayList. Якщо ви дійсно хочете ArrayListреалізації, скористайтеся цим mutableListOf().
  • Для інших Listреалізацій, які не отримали жодних - або допоміжних функцій, вони можуть бути ініційовані як, наприклад, val list = LinkedList<String>(). Тобто просто створити об’єкт, викликавши його конструктор. Використовуйте це, лише якщо ви дійсно хочете, наприклад, LinkedListреалізацію.

13

Просто для додавання більше інформації, Котлін пропонує як незмінний Listі MutableListякі можуть бути ініційовані listOfі mutableListOf. Якщо вас більше цікавить, що пропонує Котлін щодо колекцій, ви можете перейти до офіційних довідкових документів у колекціях .


8

Дозвольте пояснити деякі випадки використання: давайте створимо незмінний (незмінний) список з ініціалізуючими елементами:

val myList = listOf("one" , "two" , "three")

давайте створимо змінний (мінливий) список із ініціалізуючими полями:

val myList = mutableListOf("one" , "two" , "three")

Давайте оголосимо незмінним (незмінним), а потім створимо його:

lateinit var myList : List<String>
// and then in the code :
myList = listOf("one" , "two" , "three")

І нарешті, додайте додаткові предмети до кожного:

val myList = listOf("one" , "two" , "three")
myList.add() //Unresolved reference : add, no add method here as it is non mutable 

val myMutableList = mutableListOf("one" , "two" , "three")
myMutableList.add("four") // it's ok 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.