rxjava 合并不同类型的可观察对象

rxjava merge observables of different type

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

如果不确切知道您需要什么,很难说,但可能 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 + 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;
        }