有没有办法在 Kotlin 中做这样的事情?
mapOf(
"key1" to var1,
"key2" to var2,
if(var3 > 5) "key3" to var3
)
或者唯一的方法是在创建地图后添加键“key3”? 仅当满足某些条件时,我才想将项目添加到地图中。
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()
我曾经执行以下操作来有条件地构建地图:
mutableMapOf(
"key1" to val1,
"key2" to val2,
"key3" to val3
).also {
if (condition1) {
it["key4"] = val4
}
}.also {
if (condition2) {
it["key5"] = val5
}
}.toMap()
允许正弦多个
.also
方法调用,您可以逻辑上拆分定制以增强可读性。
我喜欢使用“构建器”
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