Java 订阅后合并PublishSubject
以下是我努力实现的目标:Java 订阅后合并PublishSubject,java,rx-java,Java,Rx Java,以下是我努力实现的目标: PublishSubject<Integer> subject = PublishSubject.create(); subject.subscribe(new Consumer<Integer>() { @Override public void accept(@NonNull Integer integer) throws Exception { System.out.print
PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
System.out.println("item = " + integer);
}
});
subject.mergeWith(Observable.just(1, 2));
subject.onNext(3);
/*
expected:
item = 1
item = 2
item = 3
but received :
item = 3
*/
PublishSubject=PublishSubject.create();
subject.subscribe(新消费者(){
@凌驾
public void accept(@NonNull Integer)引发异常{
System.out.println(“item=“+integer”);
}
});
主语。与(可观察的。仅(1,2))合并;
主题.onNext(3);
/*
预期:
项目=1
项目=2
项目=3
但收到:
项目=3
*/
我知道我可以做这样的事情:
PublishSubject.merge(subject, Observable.just(1,2)).subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
System.out.println("item = " + integer); // emits 1 2 3
}
});
final PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
System.out.println("item = " + integer);
}
});
Observable.just(1,2).subscribe(subject);
subject.onNext(3);//subscription
/*
expected:
item = 1
item = 2
item = 3
but received :
item = 1
item = 2
*/
PublishSubject.merge(subject,Observable.just(1,2)).subscribe(新消费者(){
@凌驾
public void accept(@NonNull Integer)引发异常{
System.out.println(“item=“+integer);//发出1 2 3
}
});
但问题是用户已经订阅了主题。
我找不到优雅的方式
编辑:
由于主题既是观察者又是订阅者,您可以这样做:
PublishSubject.merge(subject, Observable.just(1,2)).subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
System.out.println("item = " + integer); // emits 1 2 3
}
});
final PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
System.out.println("item = " + integer);
}
});
Observable.just(1,2).subscribe(subject);
subject.onNext(3);//subscription
/*
expected:
item = 1
item = 2
item = 3
but received :
item = 1
item = 2
*/
final PublishSubject subject=PublishSubject.create();
subject.subscribe(新消费者(){
@凌驾
public void accept(@NonNull Integer)引发异常{
System.out.println(“item=“+integer”);
}
});
可观察。仅(1,2)。订阅(主题);
主题.onNext(3)//订阅
/*
预期:
项目=1
项目=2
项目=3
但收到:
项目=1
项目=2
*/
将代码更改为
Subject<Integer> subject = PublishSubject.create();
subject.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
System.out.println("item = " + integer);
}
});
Observable.just(1,2).doOnNext(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer e) throws Exception {
subject.onNext(e);
}
}).subscribe();
subject.onNext(3);
Subject-Subject=PublishSubject.create();
subject.subscribe(新消费者(){
@凌驾
public void accept(@NonNull Integer)引发异常{
System.out.println(“item=“+integer”);
}
});
可观察的.just(1,2).doOnNext(新消费者(){
@凌驾
public void accept(@NonNull Integer e)引发异常{
主题.onNext(e);
}
}).subscribe();
主题.onNext(3);
但仍然如此。你需要订阅这个可观察对象。这不就是为什么吗?@jensgram不。这个对象是subject.mergeWith(可观察的。只是(1,2));返回一个新的可观察对象/主题,不要将该可观察对象合并到原始对象中。@Phoenix Wang有道理。谢谢你的澄清。因此,用
1
和2
项的ReplaySubject
替换Observable.just(1,2)
,然后作为订阅者订阅它。你不需要用ReplaySubject来代替PublishSubject。这取决于你的需要。@PhoenixWang我明白了。再次感谢您的澄清:)