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()) ) 
Intereting Posts
Как сделать список KOTLIN с помощью списков консоли JSON API Tornadofx – управление объектом таблицы tableview во время сборки Как сделать многосвязывание с помощью контейнера поиска зависимостей Kodein? неразрешенная ссылка: запуск Аннотации конструктора Spring на классе данных Kotlin со значениями по умолчанию Каков самый умный способ скопировать карту в Котлин? Как исправить инициализацию поля val с помощью прокси-сервера Spring Security? Анимация не работает при сохранении в базе данных? Spring Security: безопасная конечная точка на основе полномочий клиента Делегация класса Kotlin Mvp для Android Kotlin – Как я могу вернуть разные типы из моего метода? Хранить лямбда в переменной в котлин Является ли идиоматичным всегда предпочтение свойствам над полями поддержки? Observer onChanged никогда не вызывал Заменить setter для переменной, определенной в конструкторе по умолчанию