Kotlin - 使用apply或hashmap也不能按预期工作

时间:2018-05-15 14:54:28

标签: kotlin

这是一个片段,我正在尝试为api调用构建一些查询参数。

以下函数尝试将条目添加到现有的hashmap中:

// Using Apply to insert another entry : 

fun getParamsUsingApply(): HashMap<String, String> {
    return getBasicParams().apply { KEY to ANOTHER_VALUE }
}


// Using also to insert another entry :  

fun getParamsUsingAlso(): HashMap<String, String> {
    return getBasicParams().also { KEY to ANOTHER_VALUE }
}

我发现这令人困惑,如果我调用任何函数,我希望上面的hashmap在两种情况下都有新条目。

然而事实并非如此。

为什么这不符合预期的任何想法?

1 个答案:

答案 0 :(得分:5)

applyalso函数不会更新散列映射;他们只是执行传递给他们的lambda。在您的情况下,lambda会创建一对,然后将其丢弃,因为不会对其执行任何其他操作。

如果您想要返回带有添加条目的地图,您可以执行以下操作:

return basicParams + mapOf(KEY to ANOTHER_VALUE)

或者,如果您想使用apply(请注意,这会修改getBasicParams返回的地图,而上一个代码段会创建新地图):

return getBasicParams().apply { this[KEY] = ANOTHER_VALUE }