Kotlin: elementos condicionales durante la creación del map

¿Hay alguna manera de hacer algo como esto en Kotlin?

mapOf( "key1" to var1, "key2" to var2, if(var3 > 5) "key3" to var3 ) 

¿O la única forma es agregar la key "key3" después de crear el map? Me gustaría agregar un elemento a un map solo si se cumple alguna condición.

Una forma de hacerlo es usar listOfNotNull(...) + .toMap() y poner null s donde desee omitir un elemento:

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

También puede usar .takeIf { ... } , pero tenga en count que evaluará el par independientemente de la condición, por lo que si la expresión de par llama a una function, se llamará de todos modos:

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

Puede usar el operador de difusión * para hacer eso:

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