编辑 请参考@tim在下面提供的“正确”的Groovy式递归映射方法。由于Map findRecursive在Groovy中尚不存在,如果您发现自己需要在应用程序的各个部分中使用此功能,请将其添加到Map metaClass中:
Map.metaClass.findRecursive = {String key->
if(delegate.containsKey(key)) return delegate."$key"
else
for(m in delegate) {
if(m.value in Map) return m.value.findRecursive(key)
}
}
// then anywhere in your app
someMap.findRecursive('foo')
翻译
本来以为类似findResult{it.key=='foo'}的方法可以递归查找多维映射元素,但似乎不是这样。自己编写了递归映射查找器,但我想知道是否有更好的方法来完成这个任务。也许我错过了某些内置函数,或者有一种更优雅(简洁)的方式来实现以下功能:
Map map = [school:[id:'schoolID', table:'_school',
children:[team:[id:'teamID',table:'_team',
children:[player:[id:'playerID',table:'_roster']]
]]
]]
class Foo {
static finder = {Map map, String key->
if(map.containsKey(key)) return map[key]
else
for(m in map) {
if(m.value in Map) return this.finder(m.value,key)
}
}
}
println Foo.finder(map,'team')