В чем разница между Single и Observable в RxJava

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

Ответ

Single и Observable — оба являются источниками данных в RxJava, но имеют ключевые различия:

  1. Количество элементов

    • Single испускает ровно один элемент или ошибку.
    • Observable может испускать 0, 1 или множество элементов, включая ошибку/завершение.
  2. Операторы
    Некоторые операторы (onNext, onComplete) недоступны в Single, так как он завершается после onSuccess/onError.

Пример:

// Single
Single.just("Hello")
    .subscribe({ result -> println(result) }, { error -> println(error) })

// Observable
Observable.fromIterable(listOf(1, 2, 3))
    .subscribe({ num -> println(num) }, { error -> println(error) })

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

  • Single — для запросов API (ответ или ошибка).
  • Observable — для потоков данных (чаты, события UI).