如何使用Groovy Closure选择特定字段

Rei*_*eus 3 groovy closures

鉴于:

class FruitBasket {
    int apples = 0
    int oranges = 0
}
Run Code Online (Sandbox Code Playgroud)

我需要从每个FruitBasket中挑选苹果.这项工作需要在processFruit中完成:

def processFruit(list, picker) {
    list.each {
        println "processing " + picker(it)
    }
}

def processAll() {
    List fruitList = [
        new FruitBasket("apples": 2, "oranges": 4),
        new FruitBasket("apples": 3, "oranges": 5)
    ]

    processFruit(fruitList, applePicker)
}

def applePicker(FruitBasket f) {
    return f.getApples()    
}
Run Code Online (Sandbox Code Playgroud)

但它正在抱怨@运行时

No such property: applePicker for class: FooTest
Run Code Online (Sandbox Code Playgroud)

可能是关闭水果篮子的问题...

tim*_*tes 6

在该代码中,applePicker是一个方法,而不是一个闭包.

您可以使用方法句柄将方法作为参数传递,如下所示:

processFruit(fruitList, this.&applePicker)
Run Code Online (Sandbox Code Playgroud)

或者将其更改为实际闭包:

def applePicker = { FruitBasket f -> return f.getApples()    }
Run Code Online (Sandbox Code Playgroud)