我有一个MutableMap<String, MutableList<String>
,我正在向其中添加项,基本上是一个集合,其中同一个键与多个值相关联。
每当我想添加一个新值时,我需要首先检查是否已经有一个列表与同一个键相关联,如果没有则初始化一个,然后将值添加到列表中。
我可以用一种非常详细的方式来完成这个过程
if (map.containsKey(key)) {
map[key].add(value)
} else {
map[key] = mutableListOf(value)
}
我也可以用一种非常简洁的方式来完成
map[key] = (map[key] ?: mutableListOf()) + mutableListOf(value)).toMutableList()
在其他几个方面,在冗长与简洁之间。
不过,在Kotlin,这种习惯做法是什么呢?
我的目标并不是简洁,而是一种可以立即识别和理解的形式。
5条答案
按热度按时间efzxgjgh1#
您可以使用getOrPut
du7egjpx2#
我不得不考虑Python,因为它提供了一个
defaultdict
,可以像这样使用:有趣的是,Kotlin也有类似的内置扩展,即
withDefault
扩展:jvidinwx3#
创建一个扩展函数(命名为“可立即识别和理解”的函数):
在需要时使用扩展功能:
zbsbpyhn4#
这是所提供的答案@Xid的通用版本,无论键和值的类型如何,都可以使用
kgsdhlau5#
其他答案也可以,但它们都是针对使用
MutableList
作为值的,对我来说不够简洁,这里有一个与python的defaultdict
完全相似的解决方案。定义这个类(不是KotlinMaven,所以欢迎改进):
用法:
我不知道为什么Kotlin没有这样的默认设置