如何使用RxJava2将不同的异步源聚合到单个异步源中?

如何使用RxJava2将不同的异步源聚合到单个异步源中?,java,asynchronous,rx-java2,Java,Asynchronous,Rx Java2,假设我有一个同步方法: public FruitBowl getFruitBowl() { Apple apple = getApple(); // IO intensive Banana banana = getBanana(); // CPU intensive return new FruitBowl(apple, banana); } 我可以使用Java并发API将其转换为异步方法,结果有点像这样: public Future<FruitBowl>

假设我有一个同步方法:

public FruitBowl getFruitBowl() {
    Apple apple = getApple(); // IO intensive
    Banana banana = getBanana(); // CPU intensive
    return new FruitBowl(apple, banana);
}
我可以使用Java并发API将其转换为异步方法,结果有点像这样:

public Future<FruitBowl> getFruitBowl() {
    Future<Apple> appleFuture = getAppleAsync(); // IO intensive
    Future<Banana> bananaFuture = getBananaAsync(); // CPU intensive
    return createFruitBowlAsync(appleFuture, bananaFuture); // Awaits appleFuture and bananaFuture and then returns a new FruitBowl
}
public Future getFruitBowl(){
Future appleFuture=getAppleAsync();//IO密集型
Future bananaFuture=getBananaAsync();//CPU密集型
return createFruitBowlAsync(appleFuture,bananaFuture);//等待appleFuture和bananaFuture,然后返回一个新的果盘
}

在利用调度程序(io和计算)并返回单个数据时,惯用的Rx方法是什么?

您可以使用
zip
操作符。并为每个异步操作定义不同的线程。如果不这样做,这些方法将在同一线程上一个接一个地执行


我将为这两种方法创建一个
Observable
版本,以便分别返回
Observable更多关于如何使用
zip
操作符并行化操作的详细信息!
Observalbe.zip(getAppleObservable().subscribeOn(Schedulers.newThread()), 
               getBananaObservable().subscribeOn(Schedulers.newThread()),
     (apple, banana) -> new FruitBowl(apple, banana)))
     .subscribe(/* do your work here with FruitBowl object */);