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

如何在Groovy中“切片”一个集合

发布时间:2020-12-14 16:34:47 所属栏目:大数据 来源:网络整理
导读:我有一组对象,我想分解成一个集合集合,其中每个3个元素的顺序组合在一个集合中. 例如,如果我有 def l = [1,4,2,5,9] 我想把它变成: def r = [[1,2],[4,9]] 我现在通过迭代收集并分解它来完成它,但是我需要将这些“组”传递到一个处理它们的并行化函数中.消
我有一组对象,我想分解成一个集合集合,其中每个3个元素的顺序组合在一个集合中.
例如,如果我有

def l = [1,4,2,5,9]

我想把它变成:

def r = [[1,2],[4,9]]

我现在通过迭代收集并分解它来完成它,但是我需要将这些“组”传递到一个处理它们的并行化函数中.消除这个O(n)预处理是很好的工作,只是说些什么

l.slice(3).collectParallel { subC -> process(subC) }

我在Range类中找到了step方法,但它看起来只对索引有效.任何聪明的想法?

更新:
我不认为这是引用链接的重复,尽管它非常接近.如下所示,它更多的是我正在寻找的迭代器类型的东西.然后,子集合将被传递到GPars collectParallel.理想情况下,我不需要分配整个新的集合.

解决方法

查看groovy 1.8.6. List上有一个新的整理方法.

def list = [1,3,4]
assert list.collate(4) == [[1,4]] // gets you everything   
assert list.collate(2) == [[1,[3,4]] //splits evenly
assert list.collate(3) == [[1,3],[4]] // won't split evenly,remainder in last list.

看看Groovy List documentation更多的信息,因为还有一些其他参数,给你一些其他的选择,包括删除余下的.

就您的并行处理而言,您可以使用gpars浏览列表.

def list = [1,5]
GParsPool.withPool {
  list.collate(2).eachParallel {
     println it
  }
}

(编辑:李大同)

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

    推荐文章
      热点阅读