Kotlin:地图创建期间有条件的项目



有没有办法在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

最新更新