io.reactivex.ObservableEmitter<T>
からio.reactivex.Observer<T>
への簡単な変換方法はありますか?私はrx-java2
ライブラリでそれを行う機能を見つけることができませんでした。rx-java2の `ObservableEmitter`から` Observer`への変換
実装は自明であると思われる:
public static <T> Observer<T> toObserver(ObservableEmitter<T> oe) {
return new Observer<T>() {
@Override
public void onSubscribe(Disposable d) {
oe.setDisposable(d);
}
@Override
public void onNext(T t) {
oe.onNext(t);
}
@Override
public void onError(Throwable e) {
oe.onError(e);
}
@Override
public void onComplete() {
oe.onComplete();
}
};
}
それはrx-java2
における2つのコアタイプの間の変換を提供するように、それは、それが標準ライブラリ実装の一部であることを感じています。
基本的にI 2 OnSubscribe
がrxjava 2で、私は2つの他のObservable's
にサブスクライブするために使用できるSubscriber
インターフェースを提供すること
class X<T, O1, O2> implements Transformer<T, Either<O1, O2>> {
Transformer<T, O1> t1;
Transformer<T, O2> t2;
@Override
public Observable<Either<O1, O2>> call(Observable<T> input) {
return input.flatMap(new Func1<T, Observable<Either<O1, O2>>>() {
@Override
public Observable<Either<O1, O2>> call(final T t) {
return Observable.<Either<O1, O2>>create(new OnSubscribe<Either<O1, O2>>() {
@Override
public void call(final Subscriber<? super Either<O1, O2>> sub) {
t1.call(Observable.just(t)).map(o1 -> Either.<O1, O2>left(o1)).subscribe(sub);
t2.call(Observable.just(t)).map(o2 -> Either.<O1, O2>right(o2)).subscribe(sub);
}
});
}
});
}
}
Noticeをrxjava 1から次のコードを移行しようとしてい変換が必要です。
なぜだろうので、標準ライブラリにはそのようなことはありませんあなたもこれをする?あなたのエミッタを 'Observable'に「購読」したいのであれば、実際には' Observable'に直接購読するべきです。サブスクリプションでObservableを作成する場合は、 'create'の代わりに' defer() 'を使います。 – akarnokd
私は2つの変圧器 'ObservableTransformer t1'と' ObservableTransformer t2'を持っており、それらをObservableTransformer >に組み合わせたいと思います。それぞれの 'T'に対して' Observable.create'を呼び出す関数を持つ結果トランスフォーマーの 'flatMap'のapplyメソッドです。 'Observable.create'は' ObservableOnSubscribe'を 'ObservableEmitter'と取り、' t1'と 't2'の結果にそのエミッタをサブスクライブしたいと思います。 rxjava 1では 'subscribe'は同じ' Subscriber'インタフェースを受け入れます。 –
hgrey
はい、上記のコードを延期して単純化することができます...ありがとう@akarnokd – hgrey