The two parts of the code are not completely equivalent.
Even if you only item.isSomething() as many times as you need (contrary to my original answer), the first version still continues to try to iterate over the remaining collection.
Imagine an implementation of item.isSomething() that changed the collection in which the item was found (if it returns true ). At this point, the first part of the code will throw a ConcurrentModificationException , suggesting that this is a "regular" collection, while the second part of the code will simply return true .
In fact, the second part of the code is more efficient: it only iterates over most of the list, as required to determine the answer, and not through all. It is possible that performance is not very important - especially if the collection is small - but it depends on the context.
What you consider more readable is another matter - most likely, the effectiveness will not be significant, although it depends on the context. Personally, I believe that the second version is more readable and also more effective, so I will always use it. (Well, I would add braces around the body of the if , but thatโs it.)
Jon skeet
source share