rxjava合并不同类型的observable

时间:2015-03-23 20:47:27

标签: asynchronous observable rx-java rx-android

我是rxjava的新手。我需要组合两个发出不同类型对象的observable。像Observable<Milk>Observable<Cereals>之类的东西,得到Observable<CerealsWithMilk>。我无法找到这样的东西。做这样的事情的rx方式是什么?请注意,MilkCereals是异步的。

2 个答案:

答案 0 :(得分:58)

如果不确切知道自己需要什么,很难说,但可能是zip()combineLatest()

zip会同时使用Observable<Milk>Observable<Cereals>,并允许您通过提供的功能将它们合并到CerealsWithMilk中。每次获得 CerealsWithMilk a Milk时,这会发出新的Cereals

combineLatestzip类似,但即使只是新的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 + bo1o2项的应用。导致可观察到的屈服"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;
        }