はじめに
この記事では、KotlinにおけるMapの値追加・更新・削除をシンプルかつ簡潔に書く方法について解説します。
特に、Mapに対する「+」や「-」演算子を用いたイミュータブルな書き方について、具体的な例を交えて紹介します。
📝 基本的な問題(よくある冗長なコード)
例えば、あるキーに対して値を更新したいとき、こんなコードを見たことがありませんか?
// 値を更新する例(MutableMap利用)
val updatedMap = originalMap.toMutableMap().apply {
put(key, newValue)
}
これは動作としては問題ありませんが、
毎回 toMutableMap() したり、apply で put を呼ぶのは冗長です。
✅ Kotlin的なスマートな記述法:「+演算子」を使う方法
実は、KotlinではMapに対して演算子 + を使った追加・更新が可能です。
▶︎ 1つの要素を追加・更新する場合:
val updatedMap = originalMap + (key to newValue)
- シンプルで、意図が明確に伝わります
- 同じキーが存在すれば上書き、無ければ新規追加されます
- 元のoriginalMapは変更されません(イミュータブル)
動作例:
val original = mapOf("apple" to 1, "banana" to 2)
val updated = original + ("banana" to 3)
println(updated) // {apple=1, banana=3}
上記のように、banana の値が上書きされました。
▶︎ 複数の要素を一度に追加・更新する場合:
複数のキーを同時に更新したいときは、mapOfを併用できます。
val updatedMap = originalMap + mapOf(
key1 to value1,
key2 to value2
)
こちらも非常にシンプルで読みやすくなります。
動作例:
val original = mapOf("a" to 1, "b" to 2)
val updated = original + mapOf("b" to 99, "c" to 3)
println(updated) // {a=1, b=99, c=3}
複数のキーが一度に更新されていることが分かります。
⸻
🚩 キーの削除も演算子でできる:「-演算子」
値の削除には - 演算子を利用できます。
▶︎ 1つのキーを削除する場合:
val updatedMap = originalMap - key
動作例:
val original = mapOf("apple" to 1, "banana" to 2, "orange" to 3)
val updated = original - "banana"
println(updated) // {apple=1, orange=3}
▶︎ 複数のキーを削除する場合:
複数削除する場合は、リストを渡せます。
val updatedMap = originalMap - listOf(key1, key2)
動作例:
val original = mapOf("a" to 1, "b" to 2, "c" to 3)
val updated = original - listOf("a", "c")
println(updated) // {b=2}
非常に簡潔で読みやすいです。
📌 注意点(MutableMapに対しては?)
今回紹介した方法は、基本的にイミュータブルな操作です。
- 元のMapを変更したくない場合に最適
- 逆に、頻繁な書き換えが必要な場面ではパフォーマンスを考え、MutableMapを直接操作する方法が適することがあります
MutableMapでの更新例:
val mutableMap = originalMap.toMutableMap()
mutableMap[key] = newValue
この方法は高速ですが、副作用に注意が必要です。
🎯 まとめ
- Kotlinでは、+や-演算子を使うことで、Mapの追加・更新・削除を簡潔に書ける
- 同じキーは自動的に上書きされる
- イミュータブルな操作なので、意図せぬ副作用を防げる
ぜひ、簡潔で美しいコードのために活用してみてください!