有没有办法在kotlin中做这样的事情?
mapOf(
"key1" to var1,
"key2" to var2,
if(var3 > 5) "key3" to var3
)
或唯一的方法是在创建地图后添加键" key3"?我想只有在满足某种条件的情况下才能将项目添加到地图中。
做到这一点的一种方法是使用 listOfNotNull(...)
.toMap()
并将null
S放置在您要跳过项目的位置:
val map = listOfNotNull(
"key1" to var1,
"key2" to var2,
if (var3 > 5) "key3" to var3 else null
).toMap()
您可以另外使用.takeIf { ... }
,但请注意,无论条件如何,它都会评估对,因此,如果对表达式调用函数,则会被调用:
val map = listOfNotNull(
/* ... */
("key3" to var3).takeIf { var3 > 5 }
).toMap()
更新: kotlin 1.6引入了地图构建器(buildMap
)。您可以这样使用:
val map = buildMap<Char, Int>() {
put('a', 1)
put('b', 2)
if(var3 > 5) { put('c', 3) }
}
您可以使用传播操作员*
来做到这一点:
val map = mapOf(
"key1" to var1,
"key2" to var2,
*(if(var3 > 5) arrayOf("key3" to var3) else arrayOf())
)
我喜欢使用"建筑商"
val map = let {
val m = HashMap<String, Int>() //use a mutable map as a map builder
m["key1"] = var1
m["key2"] = var2
if(var3 > 5){ m["key3"] = var3 }
m.toMap()
} //wrapped in a lambda so the builder is inside a private scope and can't accidentally be used