我有一个问题。
我需要通过项目ID列表获取一些项目的列表。 起初,我试过
Observable.from(itemIds)
.flatMap(itemId -> requestToServer(itemId))
.subscribe(item -> { /* do something */ });
但是运营商flatMap
不保证商品的顺序。
我需要按ItemIds
的顺序获取项目。
如果有像Promise.all()
这样的api会很棒。
在RxJava中有类似Promise.all()
的方法吗?或任何其他方式?
答案 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,然后 发出结合所产生的项目 可观测量。