有没有像RxJava中的Promise.all()这样的方法?

时间:2016-02-11 12:18:49

标签: java android rx-java

我有一个问题。

我需要通过项目ID列表获取一些项目的列表。 起初,我试过

Observable.from(itemIds)
  .flatMap(itemId -> requestToServer(itemId))
  .subscribe(item -> { /* do something */ });

但是运营商flatMap不保证商品的顺序。 我需要按ItemIds的顺序获取项目。

如果有像Promise.all()这样的api会很棒。 在RxJava中有类似Promise.all()的方法吗?或任何其他方式?

2 个答案:

答案 0 :(得分:7)

听起来你正在寻找Zip operator

例如:

Observable<Integer> obs1 = Observable.just(1);
Observable<String> obs2 = Observable.just("Blah");
Observable<Boolean> obs3 = Observable.just(true);

Observable.zip(obs1, obs2, obs3, (Integer i, String s, Boolean b) -> i + " " + s + " " + b)
 .subscribe(str -> System.out.println(str));

打印:

1 Blah true

答案 1 :(得分:1)

请改用concatMap。这将按顺序连接发射的Observable,而不是合并它们的排放

  

返回一个新的Observable,它发出应用a产生的项目   您提供给源发出的每个项目的功能   Observable,该函数返回一个Observable,然后   发出结合所产生的项目   可观测量。