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

Ale*_*rak 8 syntax kotlin

有没有办法在Kotlin做这样的事情?

mapOf(
   "key1" to var1,
   "key2" to var2,
   if(var3 > 5) "key3" to var3       
)
Run Code Online (Sandbox Code Playgroud)

或者唯一的方法是在创建地图后添加密钥"key3"?我只想在满足某些条件的情况下将项目添加到地图中.

hot*_*key 10

一种方法是使用listOfNotNull(...)+ .toMap()并将nulls放在要跳过项目的位置:

val map = listOfNotNull(
   "key1" to var1,
   "key2" to var2,
   if (var3 > 5) "key3" to var3 else null
).toMap()
Run Code Online (Sandbox Code Playgroud)

您可以另外使用.takeIf { ... },但请注意,无论条件如何,它都将评估该对,因此如果对表达式调用函数,则无论如何都将调用它:

val map = listOfNotNull(
    /* ... */
    ("key3" to var3).takeIf { var3 > 5 }
).toMap()
Run Code Online (Sandbox Code Playgroud)


Wil*_*zel 7

您可以使用spread运算符 *来执行此操作:

val map = mapOf(
   "key1" to var1,
   "key2" to var2,
   *(if(var3 > 5) arrayOf("key3" to var3) else arrayOf())       
)
Run Code Online (Sandbox Code Playgroud)