Ответ 1
Просто используйте конструктор HashMap
:
val original = hashMapOf(1 to "x")
val copy = HashMap(original)
Обновление для Kotlin 1.1:
Начиная с Kotlin 1.1, функции расширения Map.toMap
и Map.toMutableMap
создают копии.
Я хотел бы получить новый экземпляр некоторой Карты с тем же контентом, но Map не имеет встроенного метода copy
. Я могу сделать что-то вроде этого:
val newInst = someMap.map { it.toPair() }.toMap()
Но это выглядит довольно уродливо. Есть ли более умный способ сделать это?
Просто используйте конструктор HashMap
:
val original = hashMapOf(1 to "x")
val copy = HashMap(original)
Обновление для Kotlin 1.1:
Начиная с Kotlin 1.1, функции расширения Map.toMap
и Map.toMutableMap
создают копии.
Используйте метод putAll
:
val map = mapOf("1" to 1, "2" to 2)
val copy = hashMapOf<String, Int>()
copy.putAll(map)
Или:
val map = mapOf("1" to 1, "2" to 2)
val copy = map + mapOf<String, Int>() // preset
Твой путь тоже выглядит идиоматичным для меня.
Предлагаемый способ:
map.toList().toMap()
Однако метод java в 2 - 3 раза быстрее:
(map as LinkedHashMap).clone()
В любом случае, если вас беспокоит, что нет единого способа клонирования коллекций Котлина (и есть на Java!), Проголосуйте здесь: https://youtrack.jetbrains.com/issue/KT-11221