¿Cómo agregar un elemento a una ArrayList en Kotlin?

Respuestas:

98

Para las personas que acaban de migrar java, In Kotlin Listes por defecto inmutable y se llama la versión mutable de Lists MutableList.

Por lo tanto, si tiene algo como:

val list: List<String> = ArrayList()

En este caso, no obtendrá un add()método ya que la lista es inmutable. Por lo tanto, tendrá que declarar MutableListcomo se muestra a continuación:

val list: MutableList<String> = ArrayList()

Ahora verá un add()método y podrá agregar elementos a cualquier lista.

Tarun
fuente
5
¡Gracias! Me he estado golpeando la cabeza con ese método plus en Arrays ...
dasfima
1
Bien, justo lo que estoy buscando. Gracias.
Sam Chen
77

Si tienes una colección MUTABLE :

val list = mutableListOf(1, 2, 3)
list += 4

Si tienes una colección INMUTABLE :

var list = listOf(1, 2, 3)
list += 4

tenga en cuenta que utilizo valpara la lista mutable para enfatizar que el objeto es siempre el mismo, pero su contenido cambia.

En el caso de la lista inmutable, debes hacerlo var. El +=operador crea un nuevo objeto con el valor adicional.

guenhter
fuente
7
haciendo +=en una lista no mutable, requiere copiar todos los elementos de la lista en una nueva lista mutable y luego reasignarla a su lista actual. No sabía que era adecuado declarar su lista como var. de todos modos, declarar una lista como var no es una buena idea para mí.
crgarridos
1
Si una lista es inmutable, no tiene otra opción que declararla como var. Si una lista inmutable se declara como val, entonces la lista no podrá cambiar nunca. Sería posible reasignarlo a otra variable.
guenhter
1
Exactamente, no quiero permitir cambiar la referencia de mis variables. puede tener un efecto secundario en tareas externas / de concurrencia. mejor crear una copia para extraer la lógica. Pero esto está fuera del alcance de la pregunta.
crgarridos
24

Si desea usar java ArrayList específicamente, puede hacer algo como esto:

fun initList(){
    val list: ArrayList<String> = ArrayList()
    list.add("text")
    println(list)
}

De lo contrario, la respuesta @guenhter es la que está buscando.

pokemzok
fuente