Groovy :: Mapa Buscar Recursivo

Edita Consulte la solución de @ tim a continuación para conocer el enfoque "correcto" de Groovy-esque para la recursividad de mapas. Dado que Map findRecursive aún no existe en Groovy, si necesita esta funcionalidad en varias partes de su aplicación, simplemente agréguela a 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')

Origina Esperaba que algo como findResult {it.key == 'foo'} se repitiera a través de elementos del mapa más allá de 1-d de profundidad, pero parece no ser el caso.

Rollé mi propio buscador de mapas recursivo, pero me pregunto si hay una mejor manera de hacerlo. Tal vez hay una función incorporada que me falta, o incluso una forma Groovier (concisa) para lograr lo siguiente:

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')