如何转换这样的Map:
val map = mapOf( "A" to "1", "B" to mapOf( "C" to "2" ))
val map = mapOf(
"A" to "1",
"B" to mapOf(
"C" to "2"
)
字符串数组:
["A=1", "B.C=2"]
9o685dep1#
我会从这个开始
fun print(map: Map<*, *>): List<String> = map.map { (key, value) -> when (value) { is Map<*,*> -> "$key.${print(value).single()}" else -> "$key=$value" } }
fun print(map: Map<*, *>): List<String> = map.map { (key, value) -> when (value) {
is Map<*,*> -> "$key.${print(value).single()}"
else -> "$key=$value"
} }
您还没有说明如果子Map包含除一个条目之外的任何内容该怎么做,但是您可以根据需要调整这段代码。
gijlo24d2#
我的解决方案是:
fun toStringList(map: Map<*, *>): List<String> { val result = ArrayList<String>() fun processSubmap(submap: Map<*, *>, prefix: String = "") { submap.apply{} .forEach { (k,v) -> if(v is Map<*,*>) { processSubmap( v, if(prefix.isEmpty()) k.toString() else "$prefix.$k" ) } else { val left = if(prefix.isEmpty()) k.toString() else "$prefix.$k" result.add("$left=$v") } } } processSubmap(map) return result}
fun toStringList(map: Map<*, *>): List<String> {
val result = ArrayList<String>()
fun processSubmap(submap: Map<*, *>, prefix: String = "") {
submap.apply{} .forEach { (k,v) ->
if(v is Map<*,*>) {
processSubmap(
v,
if(prefix.isEmpty()) k.toString() else "$prefix.$k"
} else {
val left = if(prefix.isEmpty()) k.toString() else "$prefix.$k"
result.add("$left=$v")
}
processSubmap(map)
return result
2条答案
按热度按时间9o685dep1#
我会从这个开始
您还没有说明如果子Map包含除一个条目之外的任何内容该怎么做,但是您可以根据需要调整这段代码。
gijlo24d2#
我的解决方案是: