rxjava 合并不同类型的可观察对象
rxjava merge observables of different type
我是 rxjava 的新手。我需要组合两个发出不同类型对象的可观察对象。像 Observable<Milk>
和 Observable<Cereals>
这样的东西,得到 Observable<CerealsWithMilk>
。我找不到这样的操作员。做这样的事情的 rx 方式是什么?请注意 Milk
和 Cereals
是异步的。
如果不确切知道您需要什么,很难说,但可能 zip() or combineLatest()。
zip
将接受 Observable<Milk>
和 Observable<Cereals>
并让您通过提供的函数将它们组合成 CerealsWithMilk
。每次你得到 both a Milk
and a Cereals
时,这会发出一个新的 CerealsWithMilk
。 =23=]
combineLatest
类似于 zip
除了它会发出一个新的 CerealsWithMilk
即使 只是 一个新的 Milk
或 只是一个新的 Cereals
被发出。
如果你想合并不同类型的可观察对象,你需要使用 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
将是一个 Observable,它会生成 (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;
}
我是 rxjava 的新手。我需要组合两个发出不同类型对象的可观察对象。像 Observable<Milk>
和 Observable<Cereals>
这样的东西,得到 Observable<CerealsWithMilk>
。我找不到这样的操作员。做这样的事情的 rx 方式是什么?请注意 Milk
和 Cereals
是异步的。
如果不确切知道您需要什么,很难说,但可能 zip() or combineLatest()。
zip
将接受 Observable<Milk>
和 Observable<Cereals>
并让您通过提供的函数将它们组合成 CerealsWithMilk
。每次你得到 both a Milk
and a Cereals
时,这会发出一个新的 CerealsWithMilk
。 =23=]
combineLatest
类似于 zip
除了它会发出一个新的 CerealsWithMilk
即使 只是 一个新的 Milk
或 只是一个新的 Cereals
被发出。
如果你想合并不同类型的可观察对象,你需要使用 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
将是一个 Observable,它会生成 (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;
}