Есть ли способ сделать что-то подобное в Котлине?
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()) )