objects - Cómo clonar o copiar una lista en kotlin
list of objects in kotlin (6)
¿Cómo copiar la lista en Kotlin?
Estoy usando
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
¿Hay una manera más fácil?
Esto funciona bien
val selectedSeries = series.toMutableList()
Para una copia superficial, sugiero
selectedSeries = ArrayList(series.map { it.copy() })
Eso funcionará para muchos tipos de colección.
Puedes usar
Lista -> toList ()
Matriz -> toArray ()
ArrayList -> toArray ()
MutableList -> toMutableList ()
Ejemplo:
array: 4
arrayCopy: 4
array after remove: 3
arrayCopy after remove: 4
imprimir registro:
.map{it}
Puedo proponer dos formas alternativas:
1. val selectedSeries = mutableListOf<String>().apply { addAll(series) }
2. val selectedSeries = mutableListOf(*series.toTypedArray())
Actualización: con el nuevo motor de inferencia de tipos (opt-in en Kotlin 1.3), podemos omitir el parámetro de tipo genérico en el primer ejemplo y tener esto:
1. val selectedSeries = mutableListOf().apply { addAll(series) }
FYI. La forma de habilitar la nueva Inferencia es
kotlinc -Xnew-inference ./SourceCode.kt
para la línea de comandos, o
kotlin { experimental { newInference ''enable''}
para Gradle.
Para obtener más información sobre la nueva inferencia de tipos, consulte este video:
KotlinConf 2018 - Nuevas características de inferencia de tipos y lenguaje relacionado de Svetlana Isakova
, especialmente ''inferencia para constructores'' a los 30 ''
toCollection()
método de extensión
toCollection()
:
val original = listOf("A", "B", "C") val copy = original.toCollection(mutableListOf())
Esto creará una nueva
MutableList
y luego agregará cada elemento del original a la lista recién creada.
El tipo inferido aquí será
MutableList<String>
.
Si no desea exponer la mutabilidad de esta nueva lista, puede declarar el tipo explícitamente como una lista inmutable:
val copy: List<String> = original.toCollection(mutableListOf())
Esto funciona para mi
val array:ArrayList<String> = ArrayList()
array.add("1")
array.add("2")
array.add("3")
array.add("4")
val arrayCopy = array.toArray() // copy array to other array
Log.i("---> array " , array?.count().toString())
Log.i("---> arrayCopy " , arrayCopy?.count().toString())
array.removeAt(0) // remove first item in array
Log.i("---> array after remove" , array?.count().toString())
Log.i("---> arrayCopy after remove" , arrayCopy?.count().toString())