The PredicatedList class doesn't allow entries that fail the predicate, but throws an Exception on entry.
The problem I have with this, is that it places the onus of filtering out invalid entries on the caller.
I typically add items in a loop. The item added is the result of a method call (which returns null if it can't create one).
This problem is so common for me that I have created my own FilteredList class that simply ignores invalid entries.
I would like the PredicatedList class to be capable of rejecting items without throwing an exception.
I don't mind writing the code for this, but there are a great many ways in which this can be done.
So I was wondering what the interface should look like.
Separate FilteredList class.
Works, but seems a little verbose for the purpose
New factory method: filteredList(List<T> list, Predicate<? super T> predicate)
Nice and simple, but doesn't allow extension; other ways of dealing with predicate failure.
New factory method with enum: predicatedList(List<T> list, Predicate<? super T> predicate, PredicateFailEnum action)
More verbose to use and adds an extra class, but allows more alternative ways to deal with predicate failure.
One more nice thing is that it might be less confusing,
because choosing between predicatedList and the above filteredList might not be so obvious.
New factory method with interface: filteredList(List<T> list, Predicate<? super T> predicate, PredicateFailInterface action)
Complex, but the most flexible way of dealing with predicate failure.