Kotlin:创建地图时的条件项目

在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 { ... } ,但是请注意,无论条件如何,它都会评估一对,所以如果pair表达式调用一个函数,它将被调用:

 val map = listOfNotNull( /* ... */ ("key3" to var3).takeIf { var3 > 5 } ).toMap() 

你可以使用传播运算符 *来做到这一点:

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