web-dev-qa-db-ja.com

RxJavaはSingle <T>を導入しました。 Observable <T>をSingle <T>に変換するにはどうすればよいですか?

RxJavaは最近導入しました Single 。元のオブザーバブルのソースを変更せずに、既存のオブザーバブル(ほとんどシングル)をシングルに変換する方法はありますか?

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

さらに背景をピンチする

RxJavaは最近、Rxに優しいシンプルなコールバック(つまり、1つのオブジェクトまたはエラーを出力するObservable)であるSingleの概念を導入しました(詳細については、こちらを参照してください- http://reactivex.io/documentation/ single.html

29
loeschg

別の答えは時代遅れだと思います。おそらく次の方法を確認する必要があります。

singleOrError:ソースが1項目より長い場合はIndexOutOfBoundsExceptionのみを、ソースが空の場合はNoSuchElementExceptionを発行します。

firstOrError:ソースが空の場合、最初の要素またはNoSuchElementExceptionを発行します。

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

elementAtOrError:index番目の要素またはNoSuchElementExceptionを発行します。

このページの詳細: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.

28
Ehtesham Hasan

注:これはRxJava 1用です。Rx2については、以下/他の回答を参照してください:)


これを実現するために、2つの新しい便利なメソッドが追加されました。

toSingle()は、単一のアイテムを発行するObservableを、そのアイテムを発行するSingleに変換します

toObservableは、Singleを、Observableに変換します。このObservableは、Singleによって発行された項目を発行し、完了します

(ソース: http://reactivex.io/documentation/single.html

31
loeschg

rxjava2では、Single.fromObservable()を使用できます。

17
PerrierCitror