I want to do alot of stuff with each of those example strings and return Object of some other type here Integers, later some bigger class-objects.
Here in this example I am trying something simple, how ever I get a completly wrong result. At least for what i was hoping to get back. xD
I hoped to get: [6, 5, 6, 5]
but instead I get: [butter, bread, dragon, table]
package test
@Grab(group='org.codehaus.gpars', module='gpars', version='1.0.0')
import static groovyx.gpars.GParsPool.withPool
class Test {
List<String> strings = new ArrayList<String>([
"butter",
"bread",
"dragon",
"table"
])
def closure = { it.length() }
def doStuff() {
def results = withPool( 4 ) {
strings.eachParallel{ it.length()}
}
println results
}
static main(args) {
def test = new Test()
test.doStuff()
}
}
It would be nice if the answer could have a short explanation. Thanks a lot!
In groovy,
each
(andeachParallel
in GPars) returns the original collection.What you want is
collect
(to return the new collection made by calling the closure)So, change
to
(btw)
GPars now comes bundled with Groovy so you shouldn't need the
@Grab
, and I assume you meant to use yourclosure
variable in thecollect
?