¿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.

  • ¿Cómo establecer "sourceCompatibility" para Kotlin y Gradle?
  • Cómo cambiar la vista en TornadoFx
  • Comience un proyecto con la ayuda de Kotlin en Android
  • Anko vista de class
  • El método TaskStackBuilder addParentStack () no funciona
  • ¿Cómo puedo establecer una propiedad de un object complementario en Kotlin a través de la reflexión?
  • Tratando de entender el ejemplo de Kotlin
  • Llame a getMeasunetworkingWidth () o getWidth () para RecyclerView return 0 en data binding
  • Cómo `continue` o` break` en una instrucción `when` dentro de un ciclo` while` usando Kotlin
  • ¿Cuáles son las semánticas de initialization de la class Kotlin?
  • volver a habilitar la conversión de intellij java a kotlin