在Groovy中返回嵌套键

str*_*tar 1 groovy nested map

我试图确定使用groovy返回嵌套键值的最佳方法.如果我有地图:

def map = [
   OrganizationName: 'SampleTest',
   Address: [
      Street: '123 Sample St',
      PostalCode: '00000',
   ]
]
Run Code Online (Sandbox Code Playgroud)

有没有办法归还所有的钥匙?OrganizationName,OrganizationURL,Address.Street,Address.PostalCode?如果我在地图中没有地图,我可以使用map.keySet()作为String [].我应该循环遍历每个键,看看它是否是另一个地图的实例?

Dón*_*nal 5

Groovy库没有为此提供方法,但您可以编写自己的方法.这是一个可以复制粘贴到Groovy控制台的示例

List<String> getNestedMapKeys(Map map, String keyPrefix = '') {
  def result = []

  map.each { key, value ->
    if (value instanceof Map) {
      result += getNestedMapKeys(value, keyPrefix += "$key.")
    } else {
      result << "$keyPrefix$key"
    }
  }

  result
}

// test it out
def map = [
   OrganizationName: 'SampleTest',
   Address: [
      Street: '123 Sample St',
      PostalCode: '00000',
   ]
]

assert ['OrganizationName', 'Address.Street', 'Address.PostalCode'] == getNestedMapKeys(map)
Run Code Online (Sandbox Code Playgroud)