Deep clone and merge nested Kotlin maps
Kotlin
@Suppress("UNCHECKED_CAST")
fun deepClone(value: Any?): Any? = when (value) {
is Map<*, *> -> value.entries.associate { it.key to deepClone(it.value) }
is List<*> -> value.map { deepClone(it) }
else -> value
}
@Suppress("UNCHECKED_CAST")
fun deepMerge(base: Map<String, Any?>, patch: Map<String, Any?>): Map<String, Any?> =
(base.keys + patch.keys).associateWith { key ->
val old = base[key]
val new = patch[key]
if (old is Map<*, *> && new is Map<*, *>) {
deepMerge(old as Map<String, Any?>, new as Map<String, Any?>)
} else {
deepClone(if (key in patch) new else old)
}
}
val config = deepMerge(mapOf("db" to mapOf("host" to "a")), mapOf("db" to mapOf("port" to 1)))