加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy – GPars:返回每个并行{}

发布时间:2020-12-14 16:30:29 所属栏目:大数据 来源:网络整理
导读:我想用这些示例字符串中的每一个做很多东西,并在这里返回一些其他类型的Object Integers,稍后是一些更大的类对象. 在这个例子中,我正在尝试一些简单的事情,但是我怎么会得到一个完全错误的结果. 至少对于我希望得到的东西.的xD 我希望得到:[6,5,6,5] 但相反
我想用这些示例字符串中的每一个做很多东西,并在这里返回一些其他类型的Object Integers,稍后是一些更大的类对象.

在这个例子中,我正在尝试一些简单的事情,但是我怎么会得到一个完全错误的结果.
至少对于我希望得到的东西.的xD

我希望得到:[6,5,6,5]
但相反,我得到:[黄油,面包,龙,表]

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

如果答案可以有一个简短的解释,那将是很好的.
非常感谢!

解决方法

在groovy中,每个(和GPars中的eachParallel)都返回原始集合.

你想要的是收集(通过调用闭包返回新的集合)

所以,改变

strings.eachParallel { it.length() }

strings.collectParallel { it.length() }

(顺便说一句)

GPars现在捆绑了Groovy所以你不需要@Grab,我假设你打算在collect中使用你的闭包变量?

package test

import static groovyx.gpars.GParsPool.withPool

class Test {
  List<String> strings =  [ "butter","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()
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读