我有2个Observable只返回1个东西。我需要两个 做其他事情的价值观。
如何订阅两个Observable并收到通知 只有当两个值都可用时才会出现?
我尝试过类似的事情:
final Observable<String> obs1 = Observable.just("A", "B");
final Observable<String> obs2 = Observable.just("A", "B");
Observable.zip(
obs1,
obs2,
(a, b) -> {
System.out.println("Processing " + a + b);
return null;
}
);
但是没有任何事情发生,除非我注册一个订阅者(这将是 无用)。
我使用的(丑陋)解决方案是嵌入式订阅,例如:
final Observable<String> obs1 = Observable.just("A", "B");
final Observable<String> obs2 = Observable.just("A", "B");
obs1.subscribe(
a -> {
obs2.subscribe(
b -> {
System.out.println("Processing " + a + b);
}
);
}
);
做这种常见事情的方法是什么?
答案 0 :(得分:4)
Observables很懒,所以你需要一个订阅者来完成这项工作。要组合两个可观察对象中的项目,您需要使用zip
运算符。对您的第一个解决方案只做一个小修改:
final Observable<String> obs1 = Observable.just("A", "B");
final Observable<String> obs2 = Observable.just("A", "B");
Observable.zip(
obs1,
obs2,
(a, b) -> {
System.out.println("Processing " + a + b);
return null;
}
).subscribe();