Как поместить элемент на карту и вернуть карту

Рассмотрим эту функцию, где мы пытаемся добавить элемент в результат toMap(): MutableMap<String, Any> :

 fun add(key: String, value: Any): MutableMap<String, Any> { val map = asMap() map.put(key, value) return map } 

Это довольно просто, но мне интересно, можно ли упростить «однострочный»? Что-то вроде:

 fun add(key: String, value: Any): MutableMap<String, Any> = asMap().magicPut(key, value) 

EDIT: Очевидно, я был недостаточно ясен: asMap() – это функция, определенная пользователем, которая возвращает MutableMap с некоторыми элементами. Метод add должен добавить к этой уже существующей карте.

EDIT2: на основе комментариев я переименовал toMap() в asMap() .

Вы можете упростить свою функцию до

 fun add(key: String, value: Any) = toMap().apply { put(key, value) } 

Вы можете использовать эту вспомогательную функцию:

 mutableMapOf(key to value) 

Это часть стандарта Kotlin lib (ссылка) .

Обновление для объяснения из комментария:

Создать функцию расширения на MutableMap<String, Any>

 fun MutableMap<String, Any>.add(key: String, value:Any) = apply { put(key to value) } 

Затем назовите это на вашей существующей карте map.add("key", "value") . Таким образом, вы можете связать свои звонки.

Это ваш код.

 fun add(key: String, value: Any): MutableMap<String, Any> { val map = toMap() map.put(key, value) return map } 

Тело функции add() может быть преобразовано в одно выражение. Таким образом, измененный код будет:

 fun add(key: String, value: Any): MutableMap<String, Any> { return toMap().apply { put(key, value) } } 

Когда функция возвращает одно выражение, фигурные скобки могут быть опущены, а тело указано после символа a = . Таким образом, измененный код будет:

 fun add(key: String, value: Any) = toMap().apply { put(key, value) }