Where has the map method on Optional moved?

Jed Wesley-Smith jed at wesleysmith.io
Mon Feb 25 21:12:01 PST 2013

Hi Paul,

You don't get a choice, it is a (or forms a) monad, you just removed
the useful methods (map/flatMap aka fmap/bind). This leaves clients to
implement them (or the functionality) in an ad-hoc and possibly buggy
form themselves.

It is a monad if there exists some pair of functions:

A -> Option<A>
Option<A> -> (A -> Option<B>) -> Option<B>

The first is Optional.of, the second is currently:

Optional<A> a = …
Optional<B> b = …
Function<A, Optional<B> f = …
if (a.isPresent) {
  b = f.apply(a.get());
} else {
  b = Optional.empty();

rather than:

Optional<A> a = …
Function<A, Optional<B> f = …
final Optional<B> b = a.flatMap(f);


On 26 February 2013 00:12, Paul Sandoz <paul.sandoz at oracle.com> wrote:
> Hi Dhananjay,
> It is not missing it was removed.
> java.util.Optional has a narrower scope that optional things in other languages. We are not trying to shoe-horn in an option monad.
> Paul.
> On Feb 23, 2013, at 12:27 AM, Dhananjay Nene <dhananjay.nene at gmail.com> wrote:
>> It seemed to be there on the Optional class in b61 but is missing now. Is
>> there some way to run map/flatMap operations on an Optional?
>> Thanks
>> Dhananjay

More information about the lambda-dev mailing list