如何把元素放到地图上并返回地图
考虑这个函数,我们试图向toMap(): MutableMap<String, Any>
结果添加一个元素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)
编辑:显然我不够清楚: asMap()
是一个用户定义的函数返回一个MutableMap与一些条目。 add
方法应该添加到这个已经存在的地图。
EDIT2:基于评论我重命名为toMap()
asMap()
。
你可以简化你的功能
fun add(key: String, value: Any) = toMap().apply { put(key, value) }
你可以使用这个辅助函数:
mutableMapOf(key to value)
它是Kotlin标准库(链接)的一部分 。
从评论更新说明:
在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) }