Создайте наблюдаемый, который объединяет два, но управляется одним - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно объединить две наблюдаемые, A & B , используя следующие правила:

  1. Тип комбинированной наблюдаемой должен быть Maybe<A>
  2. A может излучать много раз или ни одного
  3. B может излучать 1 раз или ни одного
  4. Пока B ничего не излучал, объединенная наблюдаемая ничего не будет излучать.
  5. Когда B испускает, если A испустил, последний результат A будет излучаться комбинированной наблюдаемой.Если A еще не отправлено, Maybe.empty() будет отправлено.

Я попытался использовать combineLatest, но это не работает, если A еще не выпустил.Также пытался с mergeWith и делать flatMap { if(it-was-**B**-who-emitted) Maybe.empty() else Maybe.just(emitted-item) }, но я не могу конвертировать из ObservableSource в Maybe

Возможно ли создать такую ​​наблюдаемую в RxJava 2?

1 Ответ

0 голосов
/ 07 июня 2018

Я не думаю, что это можно сделать просто с помощью операторов RxJava по умолчанию, но в качестве обходного пути вы можете заставить A выдавать «пустой элемент» с вашим значением только в начале.И затем, используя combineLatest, вы можете проверить, является ли испускаемый элемент «пустым элементом», и если это так, преобразовать его в Maybe.empty(), например, так (пример с Observable<String>):

Observable.combineLatest(
            a.startWith("EMPTY"),
            b,
            BiFunction<String, String, String> { a1, b1 -> a1 })
            .firstElement()
            .flatMap{ if (it == "EMPTY") Maybe.empty() else Maybe.just(it) }
...