46

我是 rxjava 的新手。我需要组合两个发出不同类型对象的可观察对象。像Observable<Milk>andObservable<Cereals>和得到一个Observable<CerealsWithMilk>. 我找不到这样的操作员。做这样的事情的 rx 方式是什么?请注意,MilkandCereals是异步的。

4

2 回答 2

79

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

zip将同时使用Observable<Milk>andObservable<Cereals>并让您CerealsWithMilk通过提供的功能将它们组合在一起。CerealsWithMilk每次获得aa时,都会发出一个新的。Milk Cereals

combineLatest类似于zip除了它会发出一个新的CerealsWithMilk,即使发出一个新的Milk Cereals发出一个新的。

于 2015-03-23T21:07:51.187 回答
7

如果要合并不同类型的可观察对象,则需要使用 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 + btoo1o2' 项目的应用。导致可观察到的 yield "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;
        }
于 2017-09-08T10:42:10.353 回答