Rx java RxJava:将来自不同观察对象的项目添加到主题

Rx java RxJava:将来自不同观察对象的项目添加到主题,rx-java,Rx Java,我正在尝试向主题添加项目 但是我不能调用Subject.onNext(),因为我从其他可观察对象中获取其他项 // My observer subscribes to a ReplaySubject subject.subscribe(observer) // The first item is emitted (and regularly received by my observer) // by the first observable, that after t

我正在尝试向主题添加项目

但是我不能调用
Subject.onNext()
,因为我从其他
可观察对象中获取其他项

   // My observer subscribes to a ReplaySubject
   subject.subscribe(observer)

   // The first item is emitted (and regularly received by my observer)
   // by the first observable, that after that terminates 
   firstObservable.subscribeWith(subject)

   // Now I have other observables emitting other things, 
   // and I would like to send them to the subject so that the observer receives them,
   // possibly without manually calling subject.onNext()

不建议订阅一个
主题
到多个
可观察的
s,但您可以合并这些
可观察的
s并订阅:

ReplaySubject<Integer> subject = ReplaySubject.create();

Observable.merge(first, second, third).subscribe(subject);
如果源也是动态创建的,请使用
PublishSubject
merge
将其:

Subject<Observable<Integer>> sources = PublishSubject.<Observable<Integer>>.create()
   .toSerialized();

Observable<Integer> output = Observable.merge(sources).replay().autoConnect();

sources.onNext(Observable.fromCallable(() -> getOneThing()));
sources.onNext(Observable.range(1, 10).subscribeOn(Schedulers.computation()));
Subject sources=PublishSubject..create()
.toSerialized();
可观察的输出=可观察的.merge(sources).replay().autoConnect();
onNext(Observable.fromCallable(()->getOneThing());
sources.onNext(Observable.range(1,10).subscribeOn(Schedulers.computation());

根据合同,如果一个
主题
订阅()
到一个
可观察的
终止,那么
主题也将终止


您可以使用一个
主题,而不是
主题。基本上是一个
主题
,它不会从源中传播终止。它实现而不是,但是由于
subscribe()
接受这些接口中的任何一个作为类型参数
RxRelay
是一个替代品。

这些其他
可观察到的
是预先知道的吗?为什么您可以调用
subject.onNext(getOneThing())
,而用
创建一个
可观察的
?您好,谢谢,因为我无法控制我得到的是什么,我以可观察的形式得到了我想要的所有数据
Subject<Observable<Integer>> sources = PublishSubject.<Observable<Integer>>.create()
   .toSerialized();

Observable<Integer> output = Observable.merge(sources).replay().autoConnect();

sources.onNext(Observable.fromCallable(() -> getOneThing()));
sources.onNext(Observable.range(1, 10).subscribeOn(Schedulers.computation()));