有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java映射请求基于一个可观察对象中的每个元素,使用改进?

我正在迁移REST调用以使用:Observable<T>而不是:Call<T>。对于简单的东西,它基本上是直接的,但我有点坚持这个

我用这个链浏览了一个请求的页面:

Observable.range(1, 100)
.concatMap(pageNumber -> retrofitApi.itemsObservable(pageNumber))
.takeUntil(itemsResponse -> itemsResponse.list().isEmpty()
.reduce(items, itemsResponse -> items.addAll(itemsResponse.list())
.map(items -> new ArrayList(items))

到目前为止还不错,但是。。。让我困惑的是:如何整理后续步骤:

  1. 对于items中的每个元素,发出另一个请求:retrofitApi.itemDetails(pageNumber),它返回与元素相关的数据(关于分页)
  2. 将数据添加或映射到元素items
  3. items返回为:Observable<T>元素

共 (1) 个答案

  1. # 1 楼答案

    我自己想出来的flatMap()似乎是适合这种情况的运算符

    下面是完整代码的外观:

    Observable.range(1, 100)
        .concatMap(pageNumber -> retrofitApi.itemsObservable(pageNumber))
        .takeUntil(itemsResponse -> itemsResponse.list().isEmpty()
        .reduce(items, itemsResponse -> items.addAll(itemsResponse.list())
        .map(items -> new ArrayList(items))
        // Make single item stream from list
        .flatMap(items -> Observable.from(items))
        // Now flatMap that to similar logic as above for paging
        .flatMap(item -> getItemDetails(item))
        // And return it back to List
        .reduce(/* Basic add and return list reduce */);