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() 

Вы можете использовать оператор распространения * для этого:

 val map = mapOf( "key1" to var1, "key2" to var2, *(if(var3 > 5) arrayOf("key3" to var3) else arrayOf()) ) 
Давайте будем гением компьютера.