web-dev-qa-db-ja.com

Kotlin:マップ作成中の条件付きアイテム

Kotlinでこのようなことを行う方法はありますか?

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

または、マップの作成後にキー「key3」を追加するのが唯一の方法ですか?何らかの条件が満たされた場合にのみ、アイテムをマップに追加したいと思います。

11
Aleš Zrak

これを行う1つの方法は、 listOfNotNull(...) + .toMap() を使用し、スキップする場所にnullsを配置することです。アイテム:

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

スプレッド演算子*を使用して、次のことを実行できます。

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