Brian Goetz brian.goetz at
Fri Sep 21 09:30:54 PDT 2012

> If there is this operation:
>      Optional<T> findFirst()
> then there should also be a version that takes a Predicate:
>      Optional<T> findFirst(Predicate)

We started there and beat a rapid U-turn.

If you have findFirst(Predicate), you end up reinventing the whole 
stream protocol either with overloads of find or with other methods on 
Optional or both, because what if you want to filter and then map?  Do 
you do firstFirst(Predicate, Mapper)?  There already is 
filter(Predicate), so having a findFirst(Predicate) is unnecessary.

If we have filter(Predicate) all the same arguments apply anyway.

> But the question really boils down to whether Optional can contain null,
> and I don't think it should.

I agree, so this is where the strong force meets the heavy object.  Do 
we try to keep the nulls away, or do we treat this as an illegal stream 
and blow when it gets to findFirst, or do we ignore nulls and treat them 
as "not there"?

More information about the lambda-libs-spec-observers mailing list