GPars:返回每个并行{}

时间:2013-03-19 11:38:29

标签: groovy gpars

我想用这些示例字符串做很多东西,然后在这里返回一些其他类型的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()
    }
}

如果答案可以有一个简短的解释,那就太好了。 非常感谢!

1 个答案:

答案 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()
  }
}