延迟Rx-java Observable直到另一个Observable完成

时间:2016-02-01 22:41:22

标签: reactive-programming rx-java

这是初学者的问题。我正在编写单元测试,我需要在a完成后开始b观察。

Observable<Integer> a = Observable.just(3, 4);
Observable<Integer> b = Observable.just(1, 2);

// TODO code needed here

// It is a is unit test above the line
// ---------------------------
// below is the code of the class being tested

a.forEach(System.out::print);
b.forEach(System.out::print);

应该有什么代码

1234
打印出来了?

我尝试concatWith()toBlocking()似乎没有任何效果。提前谢谢。

3 个答案:

答案 0 :(得分:1)

我道歉,但我是C#开发人员,而不是Java。

这是在C#中实现这一目标的一种方法。我认为它可以很容易地转码:

IObservable<int> a0 = new [] { 3, 4 }.ToObservable();
IObservable<int> b0 = new [] { 1, 2 }.ToObservable();

var a = new Subject<int>();
var b = b0.Finally(() => a0.Subscribe(a));

a.Subscribe(Console.WriteLine);
b.Subscribe(Console.WriteLine);

这导致:

1
2
3
4

答案 1 :(得分:0)

@ Enigmativity的答案翻译成Java

Observable<Integer> a0 = Observable.just(3, 4);
Observable<Integer> b0 = Observable.just(1, 2);
PublishSubject<Integer> a = PublishSubject.<Integer>create();
Observable<Integer> b = b0.finallyDo(() -> {
    a0.subscribe(a);
});
a.forEach(System.out::print);
b.forEach(System.out::print); 

答案 2 :(得分:0)

您可以订阅b,然后在observable的onComplete b订阅a。在两个observable中,你必须在onNext操作上实现所发出项的打印。

    Observable<Integer> a = Observable.just(3, 4);
    Observable<Object> b = Observable.just(1, 2);
    b.subscribe(System.out::print, System.out::println, () -> a.subscribe(System.out::print));