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?


10

Odpowiedzi:


132

listOf funkcja na najwyższym poziomie na ratunek:

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

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ę.

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 .


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 

1

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

val alphabates : List<String> = listOf("a", "b", "c")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.