¿Cómo inicializo la MutableList de Kotlin para vaciar la MutableList?

241

Parece tan simple, pero, ¿cómo inicializo Kotlin's MutableListpara vaciarlo MutableList?

Podría hackearlo de esta manera, pero estoy seguro de que hay algo más fácil disponible:

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

Respuestas:

436

Simplemente puedes escribir:

val mutableList = mutableListOf<Kolory>()

Esta es la forma más idiomática.

Formas alternativas son

val mutableList : MutableList<Kolory> = arrayListOf()

o

val mutableList : MutableList<Kolory> = ArrayList()

Esto está explotando el hecho de que los tipos de Java como ArrayListestán implementando implícitamente el tipo a MutableListtravés de un truco de compilación.

Kirill Rakhman
fuente
¿Necesitas importar algo? Cuando escribo esto en mi proyecto actual, obtengo una referencia sin resolver arrayListOf y lo mismo si intento mutableListOf
vextorspace
¿Tienes el stdlib en tu classpath?
Kirill Rakhman
Solo tenía que cambiar mi bandera kotlin_version en mi build.gradle de nuevo a 1.1.0 en lugar de 1.1.1
vextorspace
1
@androiddeveloper eso es porque no lokotlin.collections.List es . Kotlin tiene un mecanismo para mapear algunos tipos de Java incorporados. Consulte kotlinlang.org/docs/reference/java-interop.html#mapped-types y preguntas SO similares. La sección de comentarios no es apropiada para discutir esto en detalle. java.utils.List
Kirill Rakhman el
1
@Mohanakrrishna sí, las funciones admiten pasar argumentos.
Kirill Rakhman el
17

Varias formas según el tipo de Lista, para la Lista de matrices:

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

Para LinkedList:

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

Para otros tipos de lista, se asumirá Mutable si los construye directamente:

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

Esto es válido para cualquier cosa que implemente la Listinterfaz (es decir, otras bibliotecas de colecciones).

No es necesario repetir el tipo en el lado izquierdo si la lista ya es Mutable. O solo si desea tratarlos como de solo lectura, por ejemplo:

val myList: List<Kolory> = ArrayList()
Jayson Minard
fuente
¿Qué sucede si sé el tamaño de la nueva MutableList? Para ArrayList, puedo hacer: ArrayList(24)por ejemplo, si creo que 24 es un buen comienzo, probablemente no necesitará más que eso.
Desarrollador de Android el
@androiddeveloper Vea los documentos para los constructores de listas o la API de Java para las listas subyacentes y verá las opciones para lo que desea.
Jayson Minard el
te olvidaste de mutableListOf. Lo correcto sería:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924
10

Me gusta a continuación para:

var book: MutableList<Books> = mutableListOf()

/ ** Devuelve una nueva [MutableList] con los elementos dados. * /

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