这是初学者的问题。我正在编写单元测试,我需要在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()
似乎没有任何效果。提前谢谢。
答案 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));