我想使用Retrofit w / RxJava为距离给定位置一定距离的项目发出API请求。对于插图,这就是它可能寻找没有RxJava的Retrofit:
API api = ...
List<Item> items = new ArrayList<Item>();
int miles = 50;
do {
items = api.getItems(lon, lat, distance);
miles += 50;
} while (items.size() == 0);
基本上,我们会不断增加距离,直到我们得到至少包含1项的回复。
使用RxJava处理此类工作流程的最佳方法是什么?
答案 0 :(得分:1)
为此目的,您可以concatMap
,filter
和static Observable<Integer> getItems(int distance) {
if (distance < 500) {
return Observable.<Integer>empty().delay(500, TimeUnit.MILLISECONDS);
}
return Observable.just(1).delay(500, TimeUnit.MILLISECONDS);
}
public static void main(String[] args) {
Observable
.range(1, 20)
.map(v -> 50 * v)
.concatMap(d -> getItems(d).toList())
.doOnNext(list -> System.out.println("Got a list of " + list.size() + " items"))
.filter(list -> !list.isEmpty())
.first()
.toBlocking()
.forEach(System.out::println);
;
}
的组合:
{{1}}