Hi Dmitriy,
thanks for your interest in lambdaj.
In your case I suggest to pass to the with constructor not the list but an iterator on it like in:
with(mydata.iterator()).retain(...)
In this way you will also have the useful side effect that the filter condition will be evaluated lazily only if and when you call next on the resulting LambdaIterator. It means that you don't have to traverse the whole list and evaluate all the items in it if you need, let's say, only the first 10 items that match the filter. Does this make sense?
Mario