I might be misunderstanding how collect works, but doesn't it make a new collection instance and then populate that with whatever the closure returns?  If that is the case, for large collections, wouldn't this be less memory efficient than using each() to overwrite the already existing list since groovy doesn't have concurrent modification problems (not that it matters for this test)?