src/main/java/io/reactivex/Maybe.java
@SuppressWarnings("unchecked")
    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <R> Maybe<R> compose(MaybeTransformer<? super T, ? extends R> transformer) {
        return wrap(((MaybeTransformer<T, R>) ObjectHelper.requireNonNull(transformer, "transformer is null")).apply(this));
    }
@SuppressWarnings("unchecked")
    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <R> Maybe<R> compose(MaybeTransformer<? super T, ? extends R> transformer) {
        return wrap(((MaybeTransformer<T, R>) ObjectHelper.requireNonNull(transformer, "transformer is null")).apply(this));
    }
Transform a Maybe by applying a particular Transformer function to it.
<p>
This method operates on the Maybe itself whereas {@link #lift} operates on the Maybe's MaybeObservers.
<p>
If the operator you are creating is designed to act on the individual item emitted by a Maybe, use
{@link #lift}. If your operator is designed to transform the source Maybe as a whole (for instance, by
applying a particular set of existing RxJava operators to it) use {@code compose}.
<dl>
<dt><b>Scheduler:</b></dt>
<dd>{@code compose} does not operate by default on a particular {@link Scheduler}.</dd>
</dl>

@param <R> the value type of the Maybe returned by the transformer function
@param transformer the transformer function, not null
@return a Maybe, transformed by the transformer function
@see <a href="https://github.com/ReactiveX/RxJava/wiki/Implementing-Your-Own-Operators">RxJava wiki: Implementing Your Own Operators</a>