2017-04-18 6 views
5

Ich hava eine Maybe<> Quelle und eine Aktion, die ich will mit diesem Wert ausführen komplettierbar wenn nicht leer ist: vielleichtVielleicht vielleicht

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

aber, wenn sie leer ist will ich ‚fertig‘ erhalten komplettierbar:

return Completable.complete(); 

Wie man diesen Schalter macht: wenn vielleicht nicht leer ist, erhält man einen komplizierten, sonst einen anderen?

+0

, wenn der andere komplettierbar ist Completable.complete(), brauchen Sie nichts weiter zu tun, wird das vielleicht im Falle nichts emittieren (die zwar nicht onError erhalten) Sie einfach onComplete bekommen, ist das, was Sie wollen? – yosriz

+0

@yosriz Ja, ich möchte 'Completable.complete()' zurückgeben, wenn vielleicht leer ist – g4s8

Antwort

10

Nun, ich habe zwei Tests geschrieben, und ich denke, dieses Verhalten, das Sie wollen, ist out of the Box gegeben. Der MaybeTest wird abgeschlossen, ohne saveToDb aufzurufen. MaybeTest2 wird saveToDb aufrufen und den Wert reduzieren und vervollständigen.

@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(); 
}