我刚开始学习rxjava。我需要将发出不同类型对象的两个observables组合起来。类似于Observable<Milk>
和 Observable<Cereals>
并得到一个 Observable<CerealsWithMilk>
。我找不到适用于这种情况的任何操作符。使用rx要怎么做?请注意,Milk
和Cereals
是异步的。
我刚开始学习rxjava。我需要将发出不同类型对象的两个observables组合起来。类似于Observable<Milk>
和 Observable<Cereals>
并得到一个 Observable<CerealsWithMilk>
。我找不到适用于这种情况的任何操作符。使用rx要怎么做?请注意,Milk
和Cereals
是异步的。
如果不知道您确切需要什么,很难说,但可能是 zip() 或 combineLatest()。
zip
将接受 Observable<Milk>
和 Observable<Cereals>
并让您通过提供的函数将它们组合成 CerealsWithMilk
。每当您同时获取到一个 Milk
和一个 Cereals
时,都会发出一个新的 CerealsWithMilk
。
combineLatest
类似于 zip
,除了它即使只有一个新的 Milk
或只有一个新的 Cereals
被发出,也会发出新的 CerealsWithMilk
。
如果你想合并不同类型的 observable,你需要使用 Observable.zip
:
Observable<String> o1 = Observable.just("a", "b", "c");
Observable<Integer> o2 = Observable.just(1, 2, 3);
Observable<String> result = Observable.zip(o1, o2, (a, b) -> a + b);
result
将是一个可观察对象,将 (a, b) -> a + b
应用于 o1
和 o2
的项。因此,生成一个可观察的结果,产生 "a1", "b2", "c3"
。
您可以使用任何函数。例如
Observable<String> o1 = Observable.just("a", "b", "c");
Observable<Integer> o2 = Observable.just(1, 2, 3);
Observable<String> result = Observable.zip(o1, o2, (a, b) -> myFunc(a, b));
//...
private String myFunc(String a, Integer b) {
//your code here
return someString;
}
zip
操作符时,问题在于可观察结果互相等待。实际上,我想要的是尽快使用已完成的 Observable。combineLatest
操作符能满足我的需求吗? - Olkunmustafa