Каков идиоматический способ клонирования MutableMap?

У меня есть MutableMap, называемый translations . Я хочу клонировать это, в другую MutableMap или карту. Я сделал это со следующим: translations.map { it.key to it.value }.toMap()

Это не «правильно» для меня. Есть ли более идиоматический способ клонирования MutableMap?

Стандартная библиотека Kotlin 1.0.x не определяет идиоматический способ копирования карты. Более идиоматичным способом будет map.toList().toMap() но иногда самый идиоматический способ сделать что-то в Котлине – это просто определить свои собственные расширения . например:

 fun <K, V> Map<K, V>.toMap(): Map<K, V> = when (size) { 0 -> emptyMap() 1 -> with(entries.iterator().next()) { Collections.singletonMap(key, value) } else -> toMutableMap() } fun <K, V> Map<K, V>.toMutableMap(): MutableMap<K, V> = LinkedHashMap(this) 

Вышеупомянутые функции расширения очень похожи на то, что определено в версии 1.1-M03 (EAP-3) .

От kotlin / Maps.kt при v1.1-M03 · JetBrains / kotlin :

 /** * Returns a new read-only map containing all key-value pairs from the original map. * * The returned map preserves the entry iteration order of the original map. */ @SinceKotlin("1.1") public fun <K, V> Map<out K, V>.toMap(): Map<K, V> = when (size) { 0 -> emptyMap() 1 -> toSingletonMap() else -> toMutableMap() } /** * Returns a new mutable map containing all key-value pairs from the original map. * * The returned map preserves the entry iteration order of the original map. */ @SinceKotlin("1.1") public fun <K, V> Map<out K, V>.toMutableMap(): MutableMap<K, V> = LinkedHashMap(this) 

Предполагаемый способ для этого – translations.toMutableMap() . К сожалению, он не сохраняет природу карты, а это означает, что полученный класс будет зависеть от реализации.