我是rxjava的新手。我需要组合两个发出不同类型对象的observable。像Observable<Milk>
和Observable<Cereals>
之类的东西,得到Observable<CerealsWithMilk>
。我无法找到这样的东西。做这样的事情的rx方式是什么?请注意,Milk
和Cereals
是异步的。
答案 0 :(得分:58)
如果不确切知道自己需要什么,很难说,但可能是zip()或combineLatest()。
zip
会同时使用Observable<Milk>
和Observable<Cereals>
,并允许您通过提供的功能将它们合并到CerealsWithMilk
中。每次获得 CerealsWithMilk
和 a Milk
时,这会发出新的Cereals
。
combineLatest
与zip
类似,但即使只是新的CerealsWithMilk
或,它也会发出新的Milk
strong>只发出新的Cereals
。
答案 1 :(得分:4)
如果要合并不同类型的可观察对象,则需要使用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;
}