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

  • Forma correcta de inyectar Dagger 2 + Kotlin + ViewModel
  • Configure Jackson para usar SNAKE_CASE "globalmente" en Spring Boot 2.0.0.M1
  • Las properties de extensión Kotlin no funcionan en Kotlin script
  • Cómo get el nombre de file de class actual en kotlin
  • Burlarse del campo final con Kotlin
  • Usar la function Reemplazar en KOTLIN
  • Kotlin Kapt: java.lang.IllegalStateException: endPosTable ya está configurado
  • ¿Las extensiones de Kotlin para Android almacenan en caching las properties sintéticas o cada vez que llama a findViewById ()?
  • Es posible get nombres de variables locales programáticamente en Java o Kotlin?
  • Montaje de Kotlin + Maven: sin atributo de manifiesto principal
  • Enlace de datos de Android a CustomView, no es capaz de establecer el model de vista de la actividad al componente