有没有办法在Kotlin做这样的事情?
mapOf(
"key1" to var1,
"key2" to var2,
if(var3 > 5) "key3" to var3
)
或者唯一的方法是在创建地图后添加密钥“key3”? 我只想在满足某些条件的情况下将一个项目添加到地图中。
答案 0 :(得分:7)
一种方法是使用listOfNotNull(...)
+ .toMap()
并将null
放在您要跳过某个项目的位置:
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()
答案 1 :(得分:6)
您可以使用spread operator *
来执行此操作:
val map = mapOf(
"key1" to var1,
"key2" to var2,
*(if(var3 > 5) arrayOf("key3" to var3) else arrayOf())
)
答案 2 :(得分:0)
我喜欢使用“生成器”
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