2017-04-18 53 views
5

我哈瓦一个Maybe<>源和一些行动,我想用这个值来执行,如果可能不为空:也许到Completable

// Maybe<T> maybe(); 
// Completable action(T value); 
return maybe().flatMapCompletable(val -> action(val)); 

但当也许是空的我希望得到“已完成” completable:

return Completable.complete(); 

如何使这个开关:如果可能不是空的获得一个可完成的,否则另一个?

+0

如果其他completable是Completable.complete(),你不需要做任何事情,在情况下,也许不会发出任何东西(而不是让onError的),你会简单地得到的onComplete,就是你想? – yosriz

+0

@yosriz是的,我想回到'Completable.complete()'时,也许是空的 – g4s8

回答

10

好了,我已经写了两次测试,我想你想这种行为是给开箱即用。该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(); 
}