Каков самый умный способ скопировать карту в Котлин?

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