2016-03-26 4 views
1

Original beobachtbar ------ a ------- b ------- c ---------- d --------> ... .
abgebildet beobachtbaren ----- A ------- B (Ende)
einfachen Code wie folgt aus:Wie man ein kartiertes Observable mit der Spezifikationsbedingung bei RxScala/Java abbricht?

val original = Observable.just('a', 'b', 'c', 'd') 
    val mapped = original.map(x => x.toUpper) 
    //how to let `mapped` Observable stop emit event when received 'b' from original? 
    //do something 
    mapped.subscribe(x => println(x)) //make it only print A ,B 

wie bei B diese angeben Zustand beendet beobachtbaren abgebildet machen?

UPDATE für takeUntil Methode
takeUntil scheint eine Standard-Antwort, aber meine editer zeigt diese Methode Observable[Any] als paramter.See Definition nehmen Sie bitte,
def takeUntil(that: Observable[Any]): Observable[T]

wenn ich folgt Code verwenden

val original = Observable.just('a', 'b', 'c', 'd').takeUntil(x => x == 'b') 

ein Kompilierfehler ist aufgetreten

Verwenden wir ein gleiches Paket? Meine sbt-Abhängigkeit ist "com.netflix.rxjava" % "rxjava-scala" % "0.20.7"

+0

'original.takeUntil (x => x == 'b') map (..). Subscribe (..)' –

+0

@peeskillet, deins ist sehr unterschiedlich mit meiner Definition von 'takeUntil' Methode.Es ist sehr peinlich ... Ich habe das Problem auf meine Frage aktualisiert. Schau nochmal bitte. – LoranceChen

+0

Ich denke, es ist die Version. Ich schaue mir das Javadoc für rx-java an, und es sagt das [takUntil (Func-Prädikat)] (http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeUntil%28rx.functions.Func1) % 29) wird erst am 1.1.0 eingeführt. Ich denke, 'takeUntil (Observable)' ist eine ältere Methode. Ich weiß nicht, wie diese Version mit rx-scala Version übereinstimmt, ich habe nie rx.scala verwendet –

Antwort

1

Verwenden Sie takeWhile, es tut genau das, was Sie brauchen.

+1

Ich würde sagen ['takeUntil'] (http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeUntil%28rx. functions.Func1% 29). Mit ['takeWhile'] (http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeWhile%28rx.functions.Func1%29) erhalten Sie' B' nicht, wenn die Bedingung 'x = ist = B' –

+0

Whops; Richtig, er möchte B-Zustand beenden, nicht C-Zustand. –

+0

Hallo, ich habe [Thsi-Diagramm] (http://rxmarbles.com/#takeUntil) scheinen, aber ich weiß immer noch nicht, wie man es benutzt.Kannst du mir einen Anwendungsfall? Danke – LoranceChen

Verwandte Themen