How to select specific field using Groovy Closure

closures, groovy

Solution

In that code, applePicker is a method, not a closure.

You can either use a method handle to pass the method as a parameter like so:

processFruit(fruitList, this.&applePicker)

Or change it to an actual closure:

def applePicker = { FruitBasket f -> return f.getApples()    }

Problem

Given: ``` class FruitBasket { int apples = 0 int oranges = 0 } ``` I need to pick out apples from each FruitBasket. The work need to be done in 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() } ``` but it is complaining @ runtime that ``` No such property: applePicker for class: FooTest ``` possibly a problem with the closures FruitBasket arg...

Original source