Как отменить отображение Observable с указанием условия в RxScala/Java?

исходная наблюдаемая ------a-------b-------c----------d-------->....< br> отображаемый наблюдаемый -----A-------B(finish)
Простой код:

  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

Как сделать отображаемый наблюдаемым завершенным в B этом указанном условии?

ОБНОВЛЕНИЕ для метода takeUntil
takeUntil кажется стандартным ответом, но мой редактор показывает, что этот метод принимает Observable[Any] в качестве параметра. См. определение, пожалуйста,
def takeUntil(that: Observable[Any]): Observable[T]

если я использую следующий код

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

произошла ошибка компиляции

Error:(74, 64) missing parameter type
  val original = Observable.just('a', 'b', 'c', 'd').takeUntil(x => x == 'b')
                                                           ^

Используем ли мы один и тот же пакет? моя зависимость sbt "com.netflix.rxjava" % "rxjava-scala" % "0.20.7"


person LoranceChen    schedule 26.03.2016    source источник
comment
@peeskillet, ваше определение метода takeUntil сильно отличается от вашего. Это очень неудобно ... У меня возникла проблема с моим вопросом. Посмотрите еще раз, пожалуйста.   -  person LoranceChen    schedule 26.03.2016
comment
Я думаю, это версия. Я просматриваю javadoc для rx-java, и там написано takUntil(Func predicate) появился только в версии 1.1.0. Я предполагаю, что takeUntil(Observable) - более старый метод. Я не знаю, как эта версия совпадает с версией rx-scala, я никогда не использовал rx.scala.   -  person Paul Samsotha    schedule 26.03.2016
comment
Глядя на последнюю версию 0.26, у него есть предикатная версия, но есть и экспериментальная аннотация.   -  person Paul Samsotha    schedule 26.03.2016
comment
@peeskillet, у меня есть обновление до 0.26, оно работает хорошо ~ большое спасибо   -  person LoranceChen    schedule 26.03.2016


Ответы (1)


Используйте takeWhile, он делает именно то, что вам нужно.

person Tassos Bassoukos    schedule 26.03.2016
comment
Я бы сказал takeUntil. С takeWhile вы не получите B, если условие x == B - person Paul Samsotha; 26.03.2016
comment
упс; Правильно, он хочет закончить с условием B, а не с условием C. - person Tassos Bassoukos; 26.03.2016
comment
Привет, у меня есть эта диаграмма, но я до сих пор не знаю, как ею пользоваться. пример использования? спасибо - person LoranceChen; 26.03.2016
comment
@LoranceChen на самом деле takeWhile - takeUntil нужна вторая наблюдаемая. - person Tassos Bassoukos; 26.03.2016
comment
последняя версия кажется не нужной. Вы имеете в виду, что последняя версия обернута наблюдаемой, которую мы просто не можем видеть прямо? - person LoranceChen; 27.03.2016
comment
Нет, я имею в виду, что takeWhile работает с одной наблюдаемой (конечное условие исходит из исходной наблюдаемой), а takeUntil работает с двумя (конечное условие исходит из второй наблюдаемой). - person Tassos Bassoukos; 27.03.2016