Wie initialisiere ich List <T> in Kotlin?

82

Ich sehe, dass Kotlin eine List<out E>Sammlung hat und ich habe mich über verschiedene Möglichkeiten gewundert, eine zu initialisieren. In Java könnte ich schreiben:

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

Wie kann ich dasselbe in Kotlin erreichen?

Ali Dehghani
quelle
10
Mit listOf?
Michael

Antworten:

132

listOf Top-Level-Funktion zur Rettung:

val geeks = listOf("Fowler", "Beck", "Evans")
Ilya
quelle
11
Wenn Sie listOf ohne Parameter aufrufen, erhalten Sie eine leere Liste, oder rufen Sie einfach emptyList auf, um die Lesbarkeit zu verbessern .
Frogcoder
4
Es gibt auch arrayListOf
Greg T
Ist es für spätere Änderungen veränderbar?
IgorGanapolsky
1
@IgorGanapolsky Der zurückgegebene Typ ist schreibgeschützt List<T>, daher sollte man nicht davon ausgehen, dass er veränderbar ist.
Ilya
16

Sowohl die positiv bewerteten Antworten von Ilya als auch von Gmariotti sind gut und richtig. Einige Alternativen sind jedoch in Kommentaren verteilt, andere werden überhaupt nicht erwähnt.

Diese Antwort enthält eine Zusammenfassung der bereits gegebenen Antworten sowie Erläuterungen und einige andere Alternativen.

Unveränderliche Listen ( List)

Unveränderliche oder schreibgeschützte Listen sind Listen, in denen keine Elemente hinzugefügt oder entfernt werden können.

  • Wie Ilya betont, macht listOf()oft, was Sie wollen. Dadurch wird eine unveränderliche Liste erstellt, ähnlich wie Arrays.asListin Java.
  • Wie Frogcoder in einem Kommentar feststellt , emptyList()wird dasselbe getan , es wird jedoch natürlich eine leere Liste zurückgegeben.
  • listOfNotNull()Gibt eine unveränderliche Liste ohne alle nullElemente zurück.

Veränderbare Listen ( MutableList)

Bei veränderlichen Listen können Elemente hinzugefügt oder entfernt werden.

  • gmariotti schlägt die Verwendung vor. Dies mutableListOf()ist normalerweise das, was Sie möchten, wenn Sie Elemente zur Liste hinzufügen oder daraus entfernen müssen.
  • Greg T gibt die Alternative arrayListOf(). Dies schafft eine veränderliche ArrayList. Wenn Sie wirklich eine ArrayListImplementierung wünschen , verwenden Sie diese über mutableListOf().
  • Für andere ListImplementierungen, die keine Komfortfunktionen haben, können sie beispielsweise wie folgt initialisiert werden val list = LinkedList<String>(). Das heißt, Sie erstellen das Objekt einfach, indem Sie seinen Konstruktor aufrufen. Verwenden Sie diese Option nur, wenn Sie beispielsweise wirklich eine LinkedListImplementierung wünschen .
Magnilex
quelle
13

Gerade für weitere Informationen hinzufügen, bietet Kotlin sowohl unveränderlich Listund MutableListdas kann mit initialisiert werden listOfund mutableListOf. Wenn Sie mehr daran interessiert sind, was Kotlin in Bezug auf Sammlungen anbietet, können Sie die offiziellen Referenzdokumente unter Sammlungen aufrufen .

gmariotti
quelle
7

Lassen Sie mich einige Anwendungsfälle erläutern: Erstellen Sie eine unveränderliche (nicht änderbare) Liste mit initialisierenden Elementen:

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

Lassen Sie uns eine veränderbare (veränderbare) Liste mit initialisierenden Feldern erstellen:

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

Lassen Sie uns eine unveränderliche (nicht veränderbare) deklarieren und dann instanziieren:

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

Und zum Schluss noch ein paar zusätzliche Elemente:

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
quelle
1

Auf diese Weise können Sie die Liste in Kotlin initialisieren

val alphabates : List<String> = listOf("a", "b", "c")
Nikhil Katekhaye
quelle