This to be used for fast merge and bit operations on filters (e.g. all set operations). The fail-fast is only really needed for the contains methods when you can stop checking as soon as you know it does not contain the argument. Many operations never require the result of the passed in predicate in the forEach loop. This could wait for some performance tests to see if a forEach without the checking is much faster.