Observable and Flowable already have these methods, it might be worth adding them to Maybe, Single and Completable.
The main benefit I see with Maybe and Single is for the zip operator which now could wait for all source outcomes and the zipper will be always invoked.
Note that Completable.materialize() would become Single<Notification<T>> as well. T could be Void or an arbitrary target type:
Single<Notification<Void>> c = Completable.complete().<Void>materialize();
Single<Notification<Integer>> s = Single.just(1).materialize();
Single<Notification<Integer>> m = Maybe.<Integer>empty().materialize();
Single.zip(c, s, m, (a, b, c) -> 1);
ObservableandFlowablealready have these methods, it might be worth adding them toMaybe,SingleandCompletable.The main benefit I see with
MaybeandSingleis for thezipoperator which now could wait for all source outcomes and thezipperwill be always invoked.Note that
Completable.materialize()would becomeSingle<Notification<T>>as well.Tcould beVoidor an arbitrary target type: