rxjava合并不同类型的observable

Jel*_*lly 39 asynchronous observable rx-java rx-android

我是rxjava的新手.我需要组合两个发出不同类型对象的observable.喜欢的东西Observable<Milk>,并Observable<Cereals>和获得Observable<CerealsWithMilk>.对于像这样的事情,我找不到任何操作员.做这样的事情的rx方式是什么?请注意,Milk并且Cereals是异步的.

Ros*_*ick 63

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

zip将两者结合使用Observable<Milk>,Observable<Cereals>并让您CerealsWithMilk通过提供的功能将它们组合在一起.这发出一个新的CerealsWithMilk每次你得到的时间一个Milk 一个Cereals.

combineLatest类似于zip它会发出一个新的,CerealsWithMilk即使发出一个新的Milk 只是一个新Cereals的.

  • Zip看起来完全像我需要的.谢谢! (3认同)
  • 注意 - (只要每个源 Observable 至少发出了一项)。 (2认同)

Yul*_*mok 6

如果要合并不同类型的可观察对象,则需要使用 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);
Run Code Online (Sandbox Code Playgroud)

result将可观察到的产生的施加(a, b) -> a + bo1的和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;
        }
Run Code Online (Sandbox Code Playgroud)