Вы можете использовать filter
, который будет выдавать, только если предикат удовлетворен.
Я предположил, что вы хотите знать, когда этот кот нуждается в кормлении.Поэтому я думаю, что наблюдаемая будет более подходящей:
private val hasCatEaten = Single.just(true)
fun feedCat(animal: String): Observable<Unit> =
Observable.just(animal)
.filter { it == "cat" }
.flatMapSingle { hasCatEaten }
.filter { !it }
.map { Unit }
fun observeFeedCat() {
feedCat("cat")
.subscribeOn(schedulers.ioScheduler())
.observeOn(schedulers.mainScheduler())
.subscribeBy(onNext = { // Called when cat needs to be fed })
.addTo(disposables)
}
ОБНОВЛЕНИЕ
Это лучшее решение, которое обрабатывает оба случая:
fun shouldFeed(animal: String): Single<Boolean> =
Single.fromCallable { animal }
.filter { it == "cat" }
.flatMap { Maybe.fromCallable { !hasEaten } }
.toSingle(false)
Я тестировал этот код (не кошка, кошка съела и кошка не съела), поэтому я довольно уверен в этом ответе.