driver-async/src/main/com/mongodb/async/client/Observables.java
public static <TResult> Observable<TResult> observeAndFlatten(final Block<SingleResultCallback<List<TResult>>> operation) {
        return new Observable<TResult>() {
            @Override
            public void subscribe(final Observer<? super TResult> observer) {
                new FlatteningSingleResultCallbackSubscription<TResult>(operation, observer);
            }
        };
    }
public static <TResult> Observable<TResult> observeAndFlatten(final Block<SingleResultCallback<List<TResult>>> operation) {
        return new Observable<TResult>() {
            @Override
            public void subscribe(final Observer<? super TResult> observer) {
                new FlatteningSingleResultCallbackSubscription<TResult>(operation, observer);
            }
        };
    }
Allows the conversion of {@link SingleResultCallback} based operations and flattens the results in an {@link Observable}.

<p>Requires a {@link Block} that is passed the callback to be used with the operation.
This is required to make sure that the operation only occurs once the {@link Subscription} signals for data.</p>

@param operation the operation that is passed a callback and is used to delay execution of an operation until demanded.
@param <TResult> The type of result being observed
@return a subscription