Зачем нужен Maybe в RxJava

«Зачем нужен Maybe в RxJava» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Maybe в RxJava используется, когда нужно обработать поток данных, который может:

  1. Испустить одно значение (как Single).
  2. Завершиться без данных (как Completable).
  3. Ничего не испустить (пустой результат).

Пример:

fun fetchData(): Maybe<String> {
    return Maybe.create { emitter ->
        val data = repository.getData() // Может вернуть null
        if (data != null) emitter.onSuccess(data)
        else emitter.onComplete()
    }
}

// Подписка
fetchData()
    .subscribe(
        { data -> println("Данные: $data") },
        { error -> println("Ошибка: $error") },
        { println("Данных нет") }
    )

Когда использовать:

  • Запросы к API, где ответ может быть null или отсутствовать.
  • Операции, которые могут завершиться без результата (например, поиск в БД).