并行访问Groovy列表中的元素

时间:2014-03-31 09:04:39

标签: data-structures groovy concurrency

围绕Groovy语言这是一个简单的效率问题;我有一个Customer对象,其中有一个id,我想将这些ID转移到另一个列表中,在我看来这个列表是原子的,所以可以并行。

e.g。线性执行

public List<Long> extractIds(List<Customer> customerList) {
    List<Long> customerIds = new ArrayList<Long>();
    customerList.each { it -> customerIds.add(it.id) }
}

问题:在持有大量客户时,上述示例中传输ID的最有效方法是什么?

1 个答案:

答案 0 :(得分:2)

最简单的方法是:

public List<Long> extractIds(List<Customer> customerList) {
    customerList.id
}

或者,如果您想以多线程方式进行,可以使用gpars:

import static groovyx.gpars.GParsPool.withPool

public List<Long> extractIds(List<Customer> customerList) {
    withPool {
        customerList.collectParallel { it.id }
    }
}

但是你可能会发现第一个暴力方法对于这个简单的例子更快(而不是启动一个线程池,并同步来自不同线程的结果集合)