如何把元素放到地图上并返回地图

考虑这个函数,我们试图向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) }