我有一个名为translations
的MutableMap。我想将其克隆到另一个MutableMap或Map中。我使用以下内容完成了此操作:translations.map { it.key to it.value }.toMap()
这对我来说并不“合适”。有没有更惯用的方法来克隆MutableMap?
答案 0 :(得分:2)
Kotlin 1.0.x标准库没有定义复制地图的惯用方法。一个更多惯用的方式是map.toList().toMap()
,但有时在Kotlin中做某事的大多数惯用方法是简单地定义你自己的extensions。 e.g:
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)
上述扩展功能与release 1.1-M03 (EAP-3)中定义的功能非常相似。
来自kotlin/Maps.kt at 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)
答案 1 :(得分:1)
预期的方式是translations.toMutableMap()
。不幸的是,它不保留地图的性质,这意味着生成的类将取决于实现。
答案 2 :(得分:0)
你可以试试这个:
yourMap.toMap().toMutableMap()
这里是扩展函数:
MutableMap<K, V>.copy() = this.toMap().toMutableMap()