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我明白了。再次感谢您的澄清:)