findUsers iterates through all the found items before it returns the result, which is in turn iterated again.
See the problem?
A better approach instead of iterating through all elements and sticking them in a new list object would be to create a custom iterator so that the findUsers method would return this iterator.
This is not a problem for small results, but for big results (>100k) this is not a good idea.
Did you get it?
To summarize: findUsers return a collection that we just iterate through. Returning a iterator would be more appropriate for large subsets.
But, if you assume that you want a Collection with the returned elements, then this implemenation is appropriate.