Design for collections upgrades

Sam Pullara sam at
Tue Mar 8 13:32:13 PST 2011

I think this is exactly the issue we are talking about. It is unclear what the performance of the list after it is returned to me. I'd be much happier a one liner that looked like:

List<T> filtered = new ArrayList(otherList.filter(predicate));


List<T> filtered = otherList.filter(predicate).to(new ArrayList<>());

Generally you shouldn't be even looking at the result. What would be much better is that you just perform the next action:



for (T t : otherList.filter(predicate)) {


On Mar 8, 2011, at 1:24 PM, Brian Goetz wrote:

>>> Further, I think the choice of eager/lazy is a reasonable one to give
>>> the programmer.  Programmers who do not need the features offered by
>>> laziness shouldn't need to learn how laziness works just to use the new
>>> collection operations.
>> I don't see the need of having a eager filter().
> Java programs have lots of code that basically looks like this:
> ArrayList<T> filtered = new ArrayList<T>();
> for (T t : otherList)
>     if (predicate(t))
>         filtered.add(t);
> This can be replaced by the one liner:
> ArrayList<T> filtered = otherList.filter(predicate);
> Not only is it shorter, it is clearer, less error-prone, and does not 
> force the programmer to use side effects to do the computation.

More information about the lambda-dev mailing list