也许是可以完成的

Kir*_*ill 10 rx-java rx-java2

Maybe<>如果可能不为空,我有一个源和一些我想用这个值执行的动作:

// Maybe<T> maybe();
// Completable action(T value);
return maybe().flatMapCompletable(val -> action(val));
Run Code Online (Sandbox Code Playgroud)

但是当可能是空的时候我想要'完成'可以完成:

return Completable.complete();
Run Code Online (Sandbox Code Playgroud)

如何进行此切换:如果可能不是空的,可以获得一个完成,否则另一个?

Han*_*rst 17

好吧,我已经写了两个测试,我认为你想要的这个行为是开箱即用的.maybeTest将在不调用saveToDb的情况下完成.maybeTest2将调用saveToDb并将值展平并完成.

@Test
public void maybeTest() throws Exception {
    Completable completable = Maybe.<Integer>empty()
            .flatMapCompletable(o -> {
                System.out.println(o);

                return saveToDb(5);
            });

    completable.test().await().assertComplete();
}


@Test
public void maybeTest2() throws Exception {
    Completable completable = Maybe.just(5)
            .flatMapCompletable(o -> {
                System.out.println(o);

                return saveToDb(5);
            });

    completable.test().await().assertComplete();
}

private Completable saveToDb(long value) {
    return Completable.complete();
}
Run Code Online (Sandbox Code Playgroud)