Groovy,收集属性后的对象,而不是null?

时间:2012-12-12 08:56:37

标签: groovy

在groovy中是否已经有一种方法来收集属性后的对象而不是null?

Object.metaClass {
    collectWhileNotNull = { Closure follow ->
        def result = []

        def previous = null
        for (def current = delegate; !current.is(previous) && (current != null); current = follow(current)){
            result << current
            previous = current
        }

        return result
    }
}

它对递归数据结构非常有用。

groovy.util.Node的使用示例:

Closure getAncestors = { Node n -> n.collectWhileNotNull{ it.parent() }.tail().reverse() }

1 个答案:

答案 0 :(得分:0)

您可以使用cookbook中的Generator类(这也是必要模式的名称)。