kotlin 将map转换为带分隔符的字符串数组

krcsximq  于 2023-06-24  发布在  Kotlin
关注(0)|答案(2)|浏览(163)

如何转换这样的Map:

  1. val map = mapOf(
  2. "A" to "1",
  3. "B" to mapOf(
  4. "C" to "2"
  5. )
  6. )

字符串数组:

  1. ["A=1", "B.C=2"]
9o685dep

9o685dep1#

我会从这个开始

  1. fun print(map: Map<*, *>): List<String> = map.map { (key, value) -> when (value) {
  2. is Map<*,*> -> "$key.${print(value).single()}"
  3. else -> "$key=$value"
  4. } }

您还没有说明如果子Map包含除一个条目之外的任何内容该怎么做,但是您可以根据需要调整这段代码。

gijlo24d

gijlo24d2#

我的解决方案是:

  1. fun toStringList(map: Map<*, *>): List<String> {
  2. val result = ArrayList<String>()
  3. fun processSubmap(submap: Map<*, *>, prefix: String = "") {
  4. submap.apply{} .forEach { (k,v) ->
  5. if(v is Map<*,*>) {
  6. processSubmap(
  7. v,
  8. if(prefix.isEmpty()) k.toString() else "$prefix.$k"
  9. )
  10. } else {
  11. val left = if(prefix.isEmpty()) k.toString() else "$prefix.$k"
  12. result.add("$left=$v")
  13. }
  14. }
  15. }
  16. processSubmap(map)
  17. return result
  18. }
展开查看全部

相关问题