Rx java RxJava-合并的可观察对象,可随时接受更多的可观察对象?

Rx java RxJava-合并的可观察对象,可随时接受更多的可观察对象?,rx-java,reactive-programming,Rx Java,Reactive Programming,我遇到了一个需要可观察的实现的需求,该实现包含一个或多个可观察并合并它们。但关键是:我想随时添加更多要合并的可观察对象,我想它可能也支持删除它们 为了使其真正有效,所有订阅者都必须从订阅后添加的新观察对象接收通知。除非所有合并的观察对象都是冷的,并调用onComplete(),否则我想即使添加了更多观察对象,也可以让订阅取消订阅。这更适合于合并多个无限热观测值,并能够随时添加更多 MergableObservable<MyEvent> allSources = new Mergabl

我遇到了一个需要
可观察的
实现的需求,该实现包含一个或多个可观察并合并它们。但关键是:我想随时添加更多要合并的可观察对象,我想它可能也支持删除它们

为了使其真正有效,所有订阅者都必须从订阅后添加的新观察对象接收通知。除非所有合并的观察对象都是冷的,并调用
onComplete()
,否则我想即使添加了更多观察对象,也可以让订阅取消订阅。这更适合于合并多个无限热观测值,并能够随时添加更多

MergableObservable<MyEvent> allSources = new MergableObservable<>();

//later in application
Observable<MyEvent> eventSource1 = ...
allSources.add(eventSource1);

//and later again
Observable<MyEvent> eventSource2 = ...
allSources.add(eventSource2 );

//and so on
Observable<MyEvent> eventSource3 = ...
allSources.add(eventSource3);
MergableObservable allSources=新的MergableObservable();
//以后在应用中
可观察的eventSource1=。。。
添加(eventSource1);
//后来又
可观察事件源2=。。。
添加(eventSource2);
//等等
可观察事件源3=。。。
添加(eventSource3);

我知道有合并运算符,但我需要一个可变结构。我是否错过了一些已经存在的东西?我宁愿不使用主题,除非它绝对适合这种情况。

也许主题是处理这个问题最合理的方法。如果有人知道更好的方法,我愿意接受其他答案。这有点让我难受,因为没有一个内在的方法来做到这一点。我想这是一个共同的需要

Kotlin实施

class MergingObservable<T> {

    private val subject: SerializedSubject<T, T> = PublishSubject<T>().toSerialized()

    fun toObservable(): Observable<T> = subject

    operator fun plusAssign(observable: Observable<T>) {
        add(observable)
    }

    fun add(observable: Observable<T>): Subscription = observable.subscribe(subject)
}
可观察的类{
private val subject:SerializedSubject=PublishSubject().toSerialized()
乐趣toObservable():可观察=主题
运算符fun plusAssign(可观察:可观察){
添加(可观察)
}
乐趣添加(可观察:可观察):订阅=可观察。订阅(主题)
}

也许主题是处理这个问题最合理的方式。如果有人知道更好的方法,我愿意接受其他答案。这有点让我难受,因为没有一个内在的方法来做到这一点。我想这是一个共同的需要

Kotlin实施

class MergingObservable<T> {

    private val subject: SerializedSubject<T, T> = PublishSubject<T>().toSerialized()

    fun toObservable(): Observable<T> = subject

    operator fun plusAssign(observable: Observable<T>) {
        add(observable)
    }

    fun add(observable: Observable<T>): Subscription = observable.subscribe(subject)
}
可观察的类{
private val subject:SerializedSubject=PublishSubject().toSerialized()
乐趣toObservable():可观察=主题
运算符fun plusAssign(可观察:可观察){
添加(可观察)
}
乐趣添加(可观察:可观察):订阅=可观察。订阅(主题)
}

您不能回避主题,因为您希望手动推送新的
可观察的
源,而不是“自然”生成它们

Subject o=PublishSubject
.create().toSerialized();
ConcurrentHashSet live=。。。
o、 flatMap(v->v.takeWhile(x->live.containsKey(v)).subscribe(…);
可观察的内部=。。。
live.add(内部);
o、 onNext(内部);
//...
带电。移除(内部);

您不能回避主题,因为您希望手动推送新的
可观察的
源,而不是“自然”生成它们

Subject o=PublishSubject
.create().toSerialized();
ConcurrentHashSet live=。。。
o、 flatMap(v->v.takeWhile(x->live.containsKey(v)).subscribe(…);
可观察的内部=。。。
live.add(内部);
o、 onNext(内部);
//...
带电。移除(内部);

不错。这很聪明。我也有类似的问题,能解释一下吗?这在rx java 2 Subject o=PublishSubject.(.toSerialized()中甚至无效;说明:这个答案适用于RXJava1。另外,请阅读wiki部分。我对Rxjava非常陌生。我在看PublishProcessor,但它似乎与我需要做的相反。我需要多个出版商和一个订户(消费者)。请问一个独立的问题,所有的细节。很好。这很聪明。我也有类似的问题,能解释一下吗?这在rx java 2 Subject o=PublishSubject.(.toSerialized()中甚至无效;说明:这个答案适用于RXJava1。另外,请阅读wiki部分。我对Rxjava非常陌生。我在看PublishProcessor,但它似乎与我需要做的相反。我需要多个出版商和一个订户(消费者)。请问一个独立的问题与所有的细节。