¿Cuál es la forma más inteligente de copyr un map en Kotlin?

Me gustaría get una instancia nueva de algún map con el mismo contenido, pero Map no tiene un método de copy incorporado. Puedo hacer algo como esto:

 val newInst = someMap.map { it.toPair() }.toMap() 

Pero parece bastante feo. ¿Hay alguna manera más inteligente de hacer esto?

Solo use el constructor HashMap :

 val original = hashMapOf(1 to "x") val copy = HashMap(original) 

Actualización para Kotlin 1.1:

Desde Kotlin 1.1 , las funciones de extensión Map.toMap y Map.toMutableMap crean copys.

Use el método putAll :

 val map = mapOf("1" to 1, "2" to 2) val copy = hashMapOf<String, Int>() copy.putAll(map) 

O:

 val map = mapOf("1" to 1, "2" to 2) val copy = map + mapOf<String, Int>() // preset 

Tu manera también me parece idiomática.

La forma propuesta de hacer esto es:

 map.toList().toMap() 

Sin embargo, el método de Java es de 2 a 3 veces más rápido:

 (map as LinkedHashMap).clone() 

De todos modos, si te molesta que no haya una forma unificada de clonar las collections de Kotlin (¡y está en Java!), Vota aquí: https://youtrack.jetbrains.com/issue/KT-11221.

  • Observa Inyectar error final privado
  • ¿Cómo puedo ofuscar mi sdk codificado con kotlin (y deshacerme de Metadata)
  • package Kotlin .kt class en un JAR
  • Cambio del nombre de JVM del receptor de la function de extensión de Kotlin
  • split kotlin de arguments nullable
  • El complemento "kotlin-noarg" no funciona en el Reino
  • Kotlin: obteniendo datos de Firebase
  • JSON a HashMap con objects usando Gson
  • Kotlin Constructor Crash
  • Expresiones de objects de Kotlin: ejemplo de comparación
  • Subclass Relative Layout con constructores secundarios en Kotlin