Groovy ::地图查找递归

问题描述

|| 编辑 有关映射递归的“正确” Groovy风格的方法,请参见下面的@tim解决方案。由于Groovy中还不存在Map findRecursive,因此如果您发现自己在应用的各个部分都需要此功能,只需将其添加到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 \'}之类的东西可以遍历深度超过1-d的地图元素,但事实并非如此。 滚动了我自己的递归地图查找器,但想知道是否有更好的方法可以做到这一点。也许我缺少一个内置函数,或者甚至没有一种Groovier(简洁)的方法来实现以下功能:
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\') 
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)