1

Groovy では、 Map の .each() ループでは、コンテンツが処理される順序が保証されないことがわかっています。オブジェクトの配列の .each() はどうですか? 私の考えでは、配列の .each() は毎回安全に予想される順序を与えてくれると思っていましたが、先日友人と話していて、彼は順序が保証されるとは思わないと言いました。例えば:

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?
}

.each() または .eachWithIndex() ループの順序を保証できますか?

参照

4

1 に答える 1

3

順序は、コレクションの順序であることが保証されています。

並行性または並列性と混同されたクロージャーベースのループを取得しないでください。これは、単一スレッドでの単純な反復です。マップに関するコメントは、Javaマップには保証された順序がないことを強調しています。groovyはデフォルトでLinkedHashMapsを使用することに注意してください。それらに保証された順序があります:挿入順序による。

また、GParsを使用すると、上記が当てはまらない並列コレクションを使用できることにも注意してください。

于 2013-02-27T23:28:36.117 に答える