Comment initialiser la MutableList de Kotlin pour vider la MutableList?

241

Cela semble si simple, mais comment puis-je initialiser Kotlin MutableListpour le vider MutableList?

Je pourrais le pirater de cette façon, mais je suis sûr qu'il existe quelque chose de plus simple:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()
ssuukk
la source

Réponses:

436

Vous pouvez simplement écrire:

val mutableList = mutableListOf<Kolory>()

C'est la manière la plus idiomatique.

Des moyens alternatifs sont

val mutableList : MutableList<Kolory> = arrayListOf()

ou

val mutableList : MutableList<Kolory> = ArrayList()

Cela exploite le fait que les types java comme ArrayListimplémentent implicitement le type MutableListvia une astuce de compilation.

Kirill Rakhman
la source
Devez-vous importer quelque chose? Lorsque j'écris ceci dans mon projet actuel, j'obtiens une référence arrayListOf non résolue et la même chose si j'essaie mutableListOf
vextorspace
Avez-vous le stdlib dans votre chemin de classe?
Kirill Rakhman
Je devais juste remettre mon drapeau kotlin_version dans mon build.gradle à 1.1.0 au lieu de 1.1.1
vextorspace
1
@androiddeveloper c'est parce que ce kotlin.collections.Listn'est pas le cas java.utils.List . Kotlin a un mécanisme pour mapper certains types de java intégrés. Veuillez vous référer à kotlinlang.org/docs/reference/java-interop.html#mapped-types et aux questions SO similaires. La section des commentaires n'est pas appropriée pour en discuter en détail.
Kirill Rakhman
1
@Mohanakrrishna oui, les fonctions prennent en charge le passage d'arguments.
Kirill Rakhman le
17

Différentes formes selon le type de liste, pour la liste de tableaux:

val myList = mutableListOf<Kolory>() 
// or more specifically use the helper for a specific list type
val myList = arrayListOf<Kolory>()

Pour LinkedList:

val myList = linkedListOf<Kolory>()
// same as
val myList: MutableList<Kolory> = linkedListOf()

Pour les autres types de liste, sera supposé Mutable si vous les construisez directement:

val myList = ArrayList<Kolory>()
// or
val myList = LinkedList<Kolory>()

Cela est vrai pour tout ce qui implémente l' Listinterface (c'est-à-dire les autres bibliothèques de collections).

Pas besoin de répéter le type sur le côté gauche si la liste est déjà Mutable. Ou uniquement si vous souhaitez les traiter en lecture seule, par exemple:

val myList: List<Kolory> = ArrayList()
Jayson Minard
la source
Et si je connais la taille de la nouvelle MutableList? Pour ArrayList, je peux le faire: ArrayList(24)par exemple, si je pense que 24 est un bon début pour lui, il n'aura probablement pas besoin de plus que cela.
développeur Android
@androiddeveloper Affichez les documents pour les constructeurs de listes ou l'API Java pour les listes sous-jacentes et vous verrez des options pour ce que vous voulez.
Jayson Minard
tu as oublié mutableListOf. Le correct serait:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924
10

J'aime ci-dessous:

var book: MutableList<Books> = mutableListOf()

/ ** Renvoie une nouvelle [MutableList] avec les éléments donnés. * /

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
Chang
la source