Come posso inizializzare MutableList di Kotlin per svuotare MutableList?


241

Sembra così semplice, ma, come posso inizializzare Kotlin MutableListper svuotare MutableList?

Potrei hackerarlo in questo modo, ma sono sicuro che c'è qualcosa di più semplice disponibile:

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

Risposte:


436

Puoi semplicemente scrivere:

val mutableList = mutableListOf<Kolory>()

Questo è il modo più idiomatico.

I modi alternativi sono

val mutableList : MutableList<Kolory> = arrayListOf()

o

val mutableList : MutableList<Kolory> = ArrayList()

Questo sta sfruttando il fatto che tipi java come ArrayListstanno implementando implicitamente il tipo MutableListtramite un trucco del compilatore.


Devi importare qualcosa? Quando scrivo questo nel mio progetto attuale, ricevo arrayListOf di riferimento non risolto e lo stesso se provo mutableListOf
vextorspace

Hai lo stdlib nel tuo percorso di classe?
Kirill Rakhman,

Ho dovuto solo cambiare il mio flag kotlin_version nel mio build.gradle indietro a 1.1.0 invece di 1.1.1
vextorspace

1
@androiddeveloper è perché non lokotlin.collections.List è . Kotlin ha un meccanismo per mappare alcuni tipi di Java integrati. Fare riferimento a kotlinlang.org/docs/reference/java-interop.html#mapped-types e simili domande SO. La sezione dei commenti non è appropriata per discuterne in dettaglio. java.utils.List
Kirill Rakhman,

1
@Mohanakrrishna sì, le funzioni supportano il passaggio degli argomenti.
Kirill Rakhman

17

Varie forme a seconda del tipo di Elenco, per Elenco array:

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

Per LinkedList:

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

Per altri tipi di elenchi, si supporrà mutevole se li costruisci direttamente:

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

Questo vale per tutto ciò che implementa l' Listinterfaccia (ovvero altre librerie di raccolte).

Non è necessario ripetere il tipo sul lato sinistro se l'elenco è già modificabile. O solo se si desidera trattarli come di sola lettura, ad esempio:

val myList: List<Kolory> = ArrayList()

Cosa succede se conosco le dimensioni della nuova MutableList? Per ArrayList, posso fare: ArrayList(24)per esempio, se penso che 24 sia un buon inizio, probabilmente non avrà bisogno di altro.
sviluppatore Android il

@androiddeveloper Visualizza i documenti per i costruttori di elenchi o l'API Java per gli elenchi sottostanti e vedrai le opzioni per ciò che desideri.
Jayson Minard,

te ne sei dimenticato mutableListOf. Il corretto sarebbe:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924

10

Mi piace di seguito a:

var book: MutableList<Books> = mutableListOf()

/ ** Restituisce un nuovo [MutableList] con gli elementi indicati. * /

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.