Jak zainicjować List <T> w Kotlinie?

83

Widzę, że Kotlin ma List<out E>kolekcję i zastanawiałem się nad różnymi sposobami jej zainicjowania. W Javie mógłbym napisać:

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

Jak mogę osiągnąć to samo w Kotlinie?

Ali Dehghani
źródło
10
Z listOf?
Michael

Odpowiedzi:

132

listOf funkcja na najwyższym poziomie na ratunek:

val geeks = listOf("Fowler", "Beck", "Evans")
Ilya
źródło
11
Wywołanie listOf bez żadnego parametru powoduje wyświetlenie pustej listy lub po prostu wywołanie emptyList, aby uczynić ją bardziej czytelną.
frogcoder
4
Jest też arrayListOf
Greg T
Czy można go modyfikować do późniejszej modyfikacji?
Igor Ganapolsky
1
@IgorGanapolsky Zwrócony typ jest tylko do odczytu List<T>, więc nie należy zakładać, że jest zmienny.
Ilya
16

Obie odpowiedzi Ilya i gmariotti za głosami są dobre i poprawne. Niektóre alternatywy są jednak rozłożone w komentarzach, a niektóre w ogóle nie są wspominane.

Ta odpowiedź zawiera podsumowanie już podanych, wraz z wyjaśnieniami i kilkoma innymi alternatywami.

Niezmienne listy ( List)

Listy niezmienne, czyli listy tylko do odczytu, to listy, do których nie można dodawać ani usuwać elementów.

  • Jak podkreśla Ilya, listOf()często robi to, co chcesz. Tworzy to niezmienną listę, podobną do tej Arrays.asListw Javie.
  • Jak stwierdza frogcoder w komentarzu, emptyList()robi to samo, ale naturalnie zwraca pustą listę.
  • listOfNotNull()zwraca niezmienną listę wykluczającą wszystkie nullelementy.

Zmienne listy ( MutableList)

Na listach z możliwością zmiany można dodawać lub usuwać elementy.

  • gmariotti sugeruje użycie mutableListOf(), co zazwyczaj jest tym, czego potrzebujesz, gdy chcesz dodać lub usunąć elementy z listy.
  • Greg T daje alternatywę arrayListOf(). Tworzy to zmienny ArrayList. Jeśli naprawdę chcesz ArrayListimplementację, użyj tego powyżej mutableListOf().
  • W przypadku innych Listimplementacji, które nie mają żadnych wygodnych funkcji, można je zainicjalizować, na przykład, jako val list = LinkedList<String>(). Oznacza to po prostu utworzenie obiektu przez wywołanie jego konstruktora. Używaj tego tylko wtedy, gdy naprawdę chcesz, na przykład, LinkedListimplementację.
Magnilex
źródło
13

Aby dodać więcej informacji, Kotlin oferuje zarówno niezmienne, jak Listi te, MutableListktóre można zainicjować za pomocą listOfi mutableListOf. Jeśli jesteś bardziej zainteresowany tym, co oferuje Kotlin w zakresie Kolekcji, możesz przejść do oficjalnych dokumentów referencyjnych w Kolekcje .

gmariotti
źródło
8

Pozwólcie, że wyjaśnię kilka przypadków użycia: stwórzmy niezmienną (niezmienną) listę z inicjalizującymi elementami:

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

stwórzmy listę Mutable (zmienną) z polami inicjalizującymi:

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

Zadeklarujmy niezmienny (niezmienny), a następnie utwórzmy go:

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

I na koniec dodaj do każdego dodatkowe elementy:

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 
CodeRanger
źródło
1

W ten sposób możesz zainicjować Listę w Kotlinie

val alphabates : List<String> = listOf("a", "b", "c")
Nikhil Katekhaye
źródło