Как вызвать onError после filter()

Мой observable генерирует случайное число от 1 до 5. Я фильтрую числа, чтобы они не были равны 4. Какие есть способы вызвать метод onError внутри активити, если значение будет равно 4? Проверять значение и выбрасывать исключение в doOnNext не подойдет.

Мой observable:

var observable: Observable<Int> = Observable.create {
    it.onNext(((1..5).random()))
}

Мой метод, возвращающий этот observable:

fun getBackgroundColorObservable(): Observable<Color> =
    observable
        .delay(2, TimeUnit.SECONDS)
        .filter { x -> x != 4 }
        .subscribeOn(Schedulers.io())
        .observeOn(Schedulers.computation())
        .map { code -> generateColor(code) }
        .observeOn(AndroidSchedulers.mainThread())

Внутри активити подписываюсь на observable:

viewModel.getBackgroundColorObservable().subscribe(
            { next ->
                view.setBackgroundColor(next.code)
                textView.text = next.name
                progressBar.visibility = View.INVISIBLE
            },
            { Log.d("Error", "q") },
            { Log.d("Completed", "q") })

Ответы (2 шт):

Автор решения: Circassian

Может быть так?

observable
    .delay(2, TimeUnit.SECONDS)
    .flatMap { x ->
        if (x != 4) {
            Observable.just(x)
        } else {
            Observable.error<Int>(Throwable("Error"))
        }
    }
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.computation())
    .map { code -> Color.valueOf(code) }
    .observeOn(AndroidSchedulers.mainThread())
→ Ссылка
Автор решения: ianbelow
observable
            .delay(2, TimeUnit.SECONDS)
            .filter { x -> x != 4 }
            .switchIfEmpty(Observable.error(Throwable()))

Таким образом, если фильтр срабатывает, дальше по цепочке получаем пустой observable и меняем его на ошибку

→ Ссылка