RxJava вводит Single <t> , Как преобразовать наблюдаемый <t> к одиночному <t> ?

RxJava недавно представила Single. Есть ли способ конвертировать уже существующий Observable (который в значительной степени Single) в Single без изменения источника исходного наблюдаемого?

Например, у меня есть класс службы api с методом, который возвращает Observable, который по существу извлекает пользователя из удаленного ресурса. Скажем, я не могу изменить службу. Я хочу потреблять это в другом месте, но возвращаю Single. Как мне это сделать?

Усиление больше фона

RxJava недавно представила концепцию Single, которая представляет собой более или менее простой обратный вызов Rx (т.е. Observable, испускающий один объект или ошибку) (подробнее об этом здесь - http://reactivex.io/documentation/single.html)

Ответ 1

Я думаю, что другой ответ устарел. Вы, вероятно, должны проверить следующие методы.

singleOrError: испускает один-единственный элемент IndexOutOfBoundsException, если источник длиннее 1 элемента, или NoSuchElementException, если источник пуст.

firstOrError: испускает первый элемент или NoSuchElementException, если источник пуст.

lastOrError: испускает lastelement или NoSuchElementException, если источник пуст.

elementAtOrError: испускает элемент indexth или исключение NoSuchElementException.

Более подробная информация на этой странице: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0

Ответ 2

Примечание: это для RxJava 1. См. Другие ответы ниже/выше для Rx2 :)


Для этого было добавлено 2 новых метода удобства.

toSingle() преобразует Observable, который испускает один элемент в сингл, который испускает этот элемент

toObservable преобразует Single в наблюдаемый, который испускает элемент, издаваемый Single, а затем завершает

(источник: http://reactivex.io/documentation/single.html)

Ответ 3

В rxjava2 вы можете использовать Single.fromObservable().