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

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

Intereting Posts
Как вызвать функцию после задержки в Котлине? Почему в Коллекции Котлин нет? Как подавить проверку орфографии на константе строки в Android Kotlin? Неустранимое исключение, если оно не подключено к Интернету Как изменить правила подсветки синтаксиса для переменной с модификатором lateinit в IntelliJ (Kotlin)? Создание абстрактного Spek для инициализации общих объектов с помощью Kotlin and Spek kotlin-android null не может быть отличен для непустого типа kotlin.String Ошибка – невозможно изменить заголовок supportActionBar RxJava Live Reactive Queue (с выключенным переключателем) Счетчик приращений и декретов FireStore Transactions получает непоследовательный результат ViewPager показывает Textviews из первого фрагмента Как мы можем реализовать Observable.flatMapCompletable? В чем разница между плюсом и плюсом при перегрузке оператора котлин? Странная ситуация возникает при сортировке слияния в Котлине Kotlin: onGlobalLayout не называется