查找并返回嵌套树的成员

时间:2013-05-30 23:13:01

标签: groovy

想象一下,我有一个像这样的嵌套树

invoices{
    invoice(date: new Date(106,1,2)){

        item(count:5){
            product(name:'ULC', dollar:1499){
                vendor(id:1)
            }
        }
        item(count:1){
            product(name:'Visual Editor', dollar:499){
                vendor(id:3)
            }
        }
    }
    invoice(date: new Date(106,1,2)){
        item(count:4) {
            product(name:'Visual Editor', dollar:499){
                vendor(id:4)
            }
        }
    }

我们假设我已将其转换为发票类列表的实例。现在,在供应商ID为3的树中返回 供应商类实例的最佳方法是什么?

这是错误的,但是像

供应商myVendor =发票* .item * .product * .vendor.find {i.id == 3}

1 个答案:

答案 0 :(得分:0)

每个spread会将属性收集到一个列表中,因此,您的上一个find {}将在list lists中查找结果。您可以展平vendor列表:

def vendor = invoices*.items*.product*.vendor.flatten().find { it.id == 3 }
assert vendor