2016-04-14 10 views
11

最近RxJavaがSingleを導入しました。元のObservableのソースを変更せずに、既存のObservable(これはかなりSingleです)をSingleに変換する方法はありますか?RxJavaがシングル<T>を導入しました。 Observable <T>をシングル<T>に変換するにはどうすればよいですか?

たとえば、Observableを返すメソッドを持つAPIサービスクラスがあります。これは基本的にリモートリソースからUserを取得しています。サービスを変更できないとします。私はこれを他のところで消費したいが、シングルを返す。これはどうすればいいですか?背景

RxJavaは最近、多かれ少なかれRxの優しいシンプルなコールバック(つまり、観測可能な発光一つのオブジェクトまたはエラー)である単一の概念を導入し

ピンチ以上(ここではそれについての詳細を読んで - http://reactivex.io/documentation/single.html

答えて

22

2これを実現するための新しい便利メソッドが2追加されました。 http://reactivex.io/documentation/single.html

toSingle()

toObservableシングルによって放出されたアイテムを放出し、次いで

(ソースを完了したことを観察可能にシングル変換するアイテムを発するシングルへの単一アイテムを発するその観測を変換します)

+4

ノートシングルは何のアイテムを持っていない場合は、.toObservableは()それがObservable.empty()を返すことはありませんことを。代わりに、NoSuchElementExceptionがスローされます。このようにして得られた観察可能なものは、ソースがObservableで始まるものと同じではありません。 – eis

2

rxjava2Single.fromObservable()を使用できます。

3

私は受け入れられた答えが時代遅れだと思います。おそらく、以下の方法をチェックしてください。

singleOrError:源が空の場合、ソースは、より長い1つのアイテムまたははNoSuchElementException以上であれば唯一の要素はIndexOutOfBoundsExceptionを放出します。

firstOrError:ソースが空の場合、最初の要素を送出するか、NoSuchElementExceptionを送出します。

lastOrError:ソースが空の場合は、lastelementまたはNoSuchElementExceptionを発行します。

elementAtOrError: index要素またはNoSuchElementExceptionを発行します。このページの

さらに詳しい情報:https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0

関連する問題