GPars: return of eachParallel{}
gpars, groovy
Solution
In groovy, `each` (and `eachParallel` in GPars) returns the original collection.
What you want is `collect` (to return the new collection made by calling the closure)
So, change
strings.eachParallel { it.length() }
to
strings.collectParallel { it.length() }
(btw)
GPars now comes bundled with Groovy so you shouldn't need the `@Grab`, and I assume you meant to use your `closure` variable in the `collect`?
package test
import static groovyx.gpars.GParsPool.withPool
class Test {
List<String> strings = [ "butter", "bread", "dragon", "table" ]
def closure = { it.length() }
def doStuff() {
def results = withPool( 4 ) {
strings.collectParallel closure
}
println results
}
static main( args ) {
def test = new Test()
test.doStuff()
}
}
Problem
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!