Как изменить карту в Котлине?

Я пытаюсь изменить карту в Котлине. До сих пор я придумал:

mapOf("foo" to 42) .toList() .map { (k, v) -> v to k } .toMap() 

Есть ли лучший способ сделать это без использования посредника (средний список)?

Поскольку Map состоит из Entry s и не является Iterable . но вместо этого вы можете использовать записи Map # , они будут сопоставлены с Map # entrySet, чтобы создать резервное представление Set<Entry> , например:

 val reversed = map.entries.associateBy({ it.value }) { it.key } 

ИЛИ используйте Iterable # associate , но он создаст дополнительные Pair .

 val reversed = map.entries.associate{(k,v)-> v to k} 

ИЛИ вместо этого используйте Map # forEach . например:

 val reversed = mutableMapOf<Int, String>().also { // v-- use `forEach` here map.forEach { (k, v) -> it.put(v, k) } }.toMap() // ^--- you can add `toMap()` to create an immutable Map. 

Вот простая функция расширения, которая обращает карту – без создания ненужного мусора (например, пары, промежуточных структур данных и ненужных замыканий)

 fun <K, V> Map<K, V>.reversed() = HashMap<V, K>().also { newMap -> entries.forEach { newMap.put(it.value, it.key) } } 

обратите внимание, что apply inlined, и entries.forEach также является встроенным (что не является одинаковым для Map::forEach )

Intereting Posts
Kotlin: Что делают унарные плюсы / минусы для чисел? Котлин, как получить значение поля через отражение Котлин – нулевая безопасность? Ошибка: супертипы следующих классов не могут быть разрешены. Убедитесь, что у вас есть необходимые зависимости в пути к классам Как уничтожить сообщение grpc в котлин? Как читать текстовый файл из ресурсов в Котлин? Как конвертировать JS-код в Kotlin без ключевого слова 'new' Создание верхнего меню навигации Параметры класса данных валидации Котлин Котлин: Почему? оператор генерирует нулевые проверки при компиляции для jvm? Котлин эквивалентен Groovy spead-dot (*.) Как реализовать в jna структуру sizeof () с типом объединения Как создать анонимный интерфейс в моем классе Kotlin и использовать его? Anko: внутренняя область применения, сбивающее с толку разрешение собственности Весенняя ботинок Kotlin Jersey ModelValidationException