Одиночный элемент
RxJava (и его производные, такие как RxGroovy и RxScala) разработал вариант Observable под названием «Одиночный элемент» (Single).
Одиночный элемент — это нечто похожее на Observable, но вместо излучения серии значений — от нуля до бесконечного числа — он всегда излучает одно значение или уведомление об ошибке.
По этой причине вместо подписки на Single с тремя методами, используемыми для реагирования на уведомления от Observable (onNext, onError и onCompleted), для подписки используются только два метода:
- onSuccess
- Одиночный элемент передает этот метод единственному элементу, который излучает Одиночный элемент
- onError
- Одиночный элемент передает этот метод исключению (Throwable), которое привело к тому, что Одиночный элемент не смог излучить элемент
Одиночный элемент вызовет только один из этих методов и только один раз. После вызова любого метода Одиночный элемент завершается, и подписка на него заканчивается.
Композиция с помощью операторов Single
Как и Observable, Single можно изменять с помощью различных операторов. Некоторые операторы также позволяют создавать интерфейс между миром Observable и миром Single, чтобы вы могли смешивать эти два типа:
| Оператор | Возвращает | Описание |
|---|---|---|
| compose | Single | позволяет создавать пользовательский оператор |
| concat и concatWith | Observable | конкатенирует элементы, излучаемые несколькими Single, как излучения Observable |
| create | Single | создает Single с нуля, явно вызывая методы подписчика |
| delay | Single | смещает излучение элемента из Single во времени |
| doOnError | Single | возвращает Single, который также вызывает указанный метод при вызове onError |
| doOnSuccess | Single | возвращает Single, который также вызывает указанный метод при вызове onSuccess |
| error | Single | возвращает Single, который немедленно уведомляет подписчиков об ошибке |
| flatMap | Single | возвращает Single, который является результатом применения функции к элементу, излучаемому Single |
| flatMapObservable | Observable | возвращает Observable, который является результатом применения функции к элементу, излучаемому Single |
| from | Single | преобразует Future в Single |
| just | Single | возвращает Single, который излучает указанный элемент |
| map | Single | возвращает Single, который излучает результат применения функции к элементу, излучаемому исходному Single |
| merge | Single | преобразует Single, излучающий второй Single, в Single, который излучает элемент, излученный вторым Single |
| merge и mergeWith | Observable | объединяет элементы, излучаемые несколькими Single, как излучения Observable |
| observeOn | Single | указываем Single вызывать методы подписчика на определенном Планировщике |
| onErrorReturn | Single | преобразует Single, который генерирует уведомление об ошибке, в Single, который излучает указанный элемент |
| subscribeOn | Single | указываем Single выполнять операции на определенном Планировщике |
| timeout | Single | возвращает Single, который генерирует уведомление об ошибке, если исходный Single не излучает значение в течение указанного периода времени после подписки на него |
| toSingle | Single | преобразует Observable, который излучает один элемент, в Single, который излучает этот элемент |
| toObservable | Observable | преобразует Single в Observable, который излучает элемент, излученный Single, а затем завершается |
| zip и zipWith | Single | возвращает Single, который излучает элемент, являющийся результатом применения функции к элементам, излучаемым двумя или более другими Single |
В следующих разделах этой страницы будут представлены диаграммы с марками, которые схематически объяснят эти операторы. Эта диаграмма объясняет, как Single представлены в диаграммах с марками:
compose
concat и concatWith
Существует также версия этого оператора для экземпляров:
create
delay
Также существует версия этого оператора, которая позволяет выполнять задержку на определенном Планировщике:
doOnError
doOnSuccess
error
flatMap
flatMapObservable
from
Также существует вариант, который принимает Планировщик в качестве аргумента:
just
map
merge и mergeWith
Одна версия merge принимает Single, который излучает второй Single, и преобразует его в Single, который излучает элемент, излученный вторым Single:
Другая версия принимает два или более Single и объединяет их в Observable, который излучает элементы, излучаемые исходными Single (в произвольном порядке):
observeOn
onErrorReturn
subscribeOn
timeout
Timeout приведет к прерыванию Single с уведомлением об ошибке, если он не излучит элемент в течение указанного периода времени после подписки на него. Одна версия позволяет установить этот таймаут с помощью указанного количества единиц времени:
Вы также можете указать определенный Планировщик для работы таймера:
Версия оператора timeout позволяет переключиться на резервный Single вместо отправки уведомления об ошибке, если таймаут истек:
У этой версии также есть версия, специфичная для Планировщика:
toObservable
zip и zipWith

© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/single.html