Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

285
Vistas
Cómo clonar o copiar una lista en kotlin

¿Cómo copiar la lista en Kotlin?

Estoy usando

 val selectedSeries = mutableListOf<String>() selectedSeries.addAll(series)

¿Hay una manera más fácil?

over 4 years ago · Santiago Trujillo
14 Respuestas
Responde la pregunta

0

var oldList: List<ClassA>? val newList = oldList.map { it.copy() }
over 4 years ago · Santiago Trujillo Denunciar

0

Después de probar la copia superficial, la clonación de copia profunda y muchas más, encontré esta solución que seguramente funcionará para usted.

 val iterator: Iterator<Object> = yourList.iterator() while (iterator.hasNext()) newList.add(iterator.next().copy())
over 4 years ago · Santiago Trujillo Denunciar

0

val selectedSeries = listOf(*series.toTypedArray())
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el constructor ArrayList : ArrayList(list)

over 4 years ago · Santiago Trujillo Denunciar

0

Para listas simples tiene muchas soluciones correctas arriba.

Sin embargo, es solo para listas poco profundas.

La siguiente función funciona para cualquier ArrayList bidimensional. ArrayList es, en la práctica, equivalente a MutableList . Curiosamente, no funciona cuando se usa el tipo MutableList explícito. Si se necesitan más dimensiones, es necesario hacer más funciones.

 fun <T>cloneMatrix(v:ArrayList<ArrayList<T>>):ArrayList<ArrayList<T>>{ var MatrResult = ArrayList<ArrayList<T>>() for (i in v.indices) MatrResult.add(v[i].clone() as ArrayList<T>) return MatrResult }

Demostración para matriz entera:

 var mat = arrayListOf(arrayListOf<Int>(1,2),arrayListOf<Int>(3,12)) var mat2 = ArrayList<ArrayList<Int>>() mat2 = cloneMatrix<Int>(mat) mat2[1][1]=5 println(mat[1][1])

muestra 12

over 4 years ago · Santiago Trujillo Denunciar

0

Pruebe el siguiente código para copiar la lista en Kotlin

 arrayList2.addAll(arrayList1.filterNotNull())
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar la extensión provista Iterable.toMutableList() que le proporcionará una nueva lista. Desafortunadamente, como sugieren su firma y documentación , está destinado a garantizar que un Iterable sea una List (al igual que toString y muchos otros métodos to<type> ). Nada te garantiza que vaya a ser una lista nueva . Por ejemplo, agregar la siguiente línea al comienzo de la extensión: if (this is List) return this es una mejora de rendimiento legítima (si es que realmente mejora el rendimiento).

Además, debido a su nombre, el código resultante no es muy claro.

Prefiero agregar mi propia extensión para estar seguro del resultado y crear un código mucho más claro (al igual que tenemos para las matrices ):

 fun <T> List<T>.copyOf(): List<T> { val original = this return mutableListOf<T>().apply { addAll(original) } } fun <T> List<T>.mutableCopyOf(): MutableList<T> { val original = this return mutableListOf<T>().apply { addAll(original) } }

Tenga en cuenta que addAll es la forma más rápida de copiar porque usa el System.arraycopy nativo en la implementación de ArrayList .

Además, tenga en cuenta que esto solo le dará una copia superficial .

EDITAR:

Es posible que desee utilizar la versión más genérica:

 fun <T> Collection<T>.copyOf(): Collection<T> { val original = this return mutableListOf<T>().apply { addAll(original) } } fun <T> Collection<T>.mutableCopyOf(): MutableCollection<T> { val original = this return mutableListOf<T>().apply { addAll(original) } }
over 4 years ago · Santiago Trujillo Denunciar

0

Al igual que en Java:

Lista:

 val list = mutableListOf("a", "b", "c") val list2 = ArrayList(list)

Mapa:

 val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3) val map2 = HashMap(map)

Suponiendo que está apuntando a la JVM (o Android); No estoy seguro de que funcione para otros objetivos, ya que depende de los constructores de copias de ArrayList y HashMap.

over 4 years ago · Santiago Trujillo Denunciar

0

Usaría el 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 quiere exponer la mutabilidad de esta nueva lista, puede declarar el tipo explícitamente como una lista inmutable:

 val copy: List<String> = original.toCollection(mutableListOf())
over 4 years ago · Santiago Trujillo Denunciar

0

Esto funciona bien.

 val selectedSeries = series.toMutableList()
over 4 years ago · Santiago Trujillo Denunciar

0

Puedo pensar en 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 optar por una 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 funciones de inferencia de tipos y lenguaje relacionado por Svetlana Isakova , especialmente 'inferencia para constructores' en 30'

over 4 years ago · Santiago Trujillo Denunciar

0

Si su lista contiene la clase de datos kotlin , puede hacer esto

 selectedSeries = ArrayList(series.map { it.copy() })
over 4 years ago · Santiago Trujillo Denunciar

0

Puedes usar

Lista -> aLista()

Matriz -> a Matriz()

ArrayList -> toArray()

MutableList -> toMutableList()


Ejemplo:

 val array = arrayListOf("1", "2", "3", "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())

registro de impresión:

 array: 4 arrayCopy: 4 array after remove: 3 arrayCopy after remove: 4
over 4 years ago · Santiago Trujillo Denunciar

0

Para una copia superficial, sugiero

 .map{it}

Eso funcionará para muchos tipos de colección.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda