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

时间:2017-05-25 22:23:36

标签: kotlin

考虑这个函数,我们尝试在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()

4 个答案:

答案 0 :(得分:6)

您可以将功能简化为

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

答案 1 :(得分:3)

您可以使用此辅助功能:

mutableMapOf(key to value)

它是Kotlin标准库(link)的一部分。

评论解释更新:

MutableMap<String, Any>

上创建扩展功能
fun MutableMap<String, Any>.add(key: String, value:Any) = apply { put(key to value) }

然后在现有地图map.add("key", "value")上拨打此电话。通过这种方式,您可以链接添加调用。

答案 2 :(得分:0)

这是你的代码。

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) }
}

当函数返回单个表达式时,可以省略花括号,并在=符号后指定正文。因此,修改后的代码将是:

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

答案 3 :(得分:0)

您不需要自己做。您可以简单地:asMap().plus(key to value)

文档here