将项目添加到地图中的列表的 Kotlin 惯用方法

Rai*_*baz 0 collections idioms kotlin

我有一个MutableMap<String, MutableList<String>我正在向其中添加项目,基本上是一个集合,其中相同的键与多个值相关联。

每当我想添加一个新值时,我需要首先检查是否已经有一个与同一个键关联的列表,如果没有则初始化一个,然后将该值添加到列表中。

我可以通过这样做以非常冗长的方式做到这一点

if (map.containsKey(key)) {
    map[key].add(value)
} else {
    map[key] = mutableListOf(value)
}
Run Code Online (Sandbox Code Playgroud)

我也可以通过这样做以非常简洁的方式做到这一点

map[key] = (map[key] ?: mutableListOf()) + mutableListOf(value)).toMutableList()
Run Code Online (Sandbox Code Playgroud)

以及介于冗长与简洁之间的其他几种方式。

但是,在 Kotlin 中执行此操作的惯用方法是什么?

我并不是真正的目标是简洁,而是要立即识别和理解的形式。

IR4*_*R42 8

您可以使用getOrPut

map.getOrPut(key) { mutableListOf() }.add(value)
Run Code Online (Sandbox Code Playgroud)

  • 或者更惯用的 `map.getOrPut(key) { mutableListOf() } += value` (3认同)
  • 这是迄今为止最简单、最惯用的方法。没有理由像其他答案一样重新发明轮子。 (2认同)