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?
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?
listOf
?Odpowiedzi:
listOf
funkcja na najwyższym poziomie na ratunek:val geeks = listOf("Fowler", "Beck", "Evans")
źródło
List<T>
, więc nie należy zakładać, że jest zmienny.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.
listOf()
często robi to, co chcesz. Tworzy to niezmienną listę, podobną do tejArrays.asList
w Javie.emptyList()
robi to samo, ale naturalnie zwraca pustą listę.listOfNotNull()
zwraca niezmienną listę wykluczającą wszystkienull
elementy.Zmienne listy (
MutableList
)Na listach z możliwością zmiany można dodawać lub usuwać elementy.
mutableListOf()
, co zazwyczaj jest tym, czego potrzebujesz, gdy chcesz dodać lub usunąć elementy z listy.arrayListOf()
. Tworzy to zmiennyArrayList
. Jeśli naprawdę chceszArrayList
implementację, użyj tego powyżejmutableListOf()
.List
implementacji, które nie mają żadnych wygodnych funkcji, można je zainicjalizować, na przykład, jakoval 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,LinkedList
implementację.źródło
Aby dodać więcej informacji, Kotlin oferuje zarówno niezmienne, jak
List
i te,MutableList
które można zainicjować za pomocąlistOf
imutableListOf
. Jeśli jesteś bardziej zainteresowany tym, co oferuje Kotlin w zakresie Kolekcji, możesz przejść do oficjalnych dokumentów referencyjnych w Kolekcje .źródło
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
źródło
W ten sposób możesz zainicjować Listę w Kotlinie
val alphabates : List<String> = listOf("a", "b", "c")
źródło