groovy – GPars:返回每个并行{}
发布时间:2020-12-14 16:30:29 所属栏目:大数据 来源:网络整理
导读:我想用这些示例字符串中的每一个做很多东西,并在这里返回一些其他类型的Object Integers,稍后是一些更大的类对象. 在这个例子中,我正在尝试一些简单的事情,但是我怎么会得到一个完全错误的结果. 至少对于我希望得到的东西.的xD 我希望得到:[6,5,6,5] 但相反
我想用这些示例字符串中的每一个做很多东西,并在这里返回一些其他类型的Object Integers,稍后是一些更大的类对象.
在这个例子中,我正在尝试一些简单的事情,但是我怎么会得到一个完全错误的结果. 我希望得到:[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() } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |