2013-02-27 195 views
1

在groovy中,我知道Map上的.each()循环具有内容处理顺序的no guarantee。那么objs数组上的.each()怎么样?我的想法是,数组上的.each()每次都会安全地给我预期的顺序,但前一天与一位朋友交谈,他说他认为订单不会得到保证。例如:保证数组处理的顺序.each()Groovy

MyObj[] x = [ obj1, obj2, obj3 ]; 

x.each(){ obj -> 
    //what order will my objs come in? 
} 

此外,何谈:

x.eachWithIndex() { obj, i -> 
    println(i); //what order will they come in? 
} 

我可以保证我的。每()或.eachWithIndex()循环的顺序?

Reference

回答

3

顺序保证是集合的次序。

不要让基于闭包的循环与并发或并行混淆。这只是一个简单的迭代。关于地图的评论只是强调了Java地图没有保证排序。请注意,groovy默认使用LinkedHashMaps。那些有一个保证排序:按插入顺序。

另请注意,对于GPars,您可以在上述不适用的情况下使用平行集合。

+0

真棒谢谢!你说groovy默认使用LinkedHashMaps,我的示例代码是一个LinkedHashMap吗? – 2013-02-28 00:50:49

+0

宣称像'[key:value]'的地图文字将为LinkedHashMaps。 – ataylor 2013-02-28 01:30:07