Я хотел бы получить новый экземпляр некоторой Карты с тем же контентом, но 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