我想用这些示例字符串做很多东西,然后在这里返回一些其他类型的Object Integers,稍后是一些更大的类对象。
在这个例子中,我正在尝试一些简单的事情,但是我怎么会得到一个完全错误的结果。 至少对于我希望得到的东西。的xD
我希望得到:[6, 5, 6, 5]
但我得到:[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()
}
}
如果答案可以有一个简短的解释,那就太好了。 非常感谢!
答案 0 :(得分:11)
在groovy中,each
(以及GPars中的eachParallel
)会返回原始集合。
你想要的是collect
(通过调用闭包返回新的集合)
所以,改变
strings.eachParallel { it.length() }
到
strings.collectParallel { it.length() }
GPars现在捆绑了Groovy,因此您不应该使用@Grab
,我认为您打算在closure
中使用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()
}
}