там возникают две разные проблемы: если строишь цепочку Map(..).FlatMap(..), то это субоптимально, т.к. все функции выполнятся даже если optional изначально был none; если же использовать .FlatMap(.. => ...FlatMap(.. => ...FlatMap(..))), то получается лучше, но скобок очень много
да в качестве хака зашло бы даже написать оверлоады
maybeChain<I,T1,T2>(Optional<I> initialValue, Function<I, Optional<T1>> firstMapping, Function<T1, Optional<T2>> secondMapping) и тд