RxJava如何过滤子树然后return树

RxJava how to filter sub tree and then return the tree

如果我有 Observable<JsonOrderList>

JsonOrderList定义如下:

public class JsonOrderList {

  public List<Order> data;
  public int currentCount;
  public int currentPage;
  public int pageCount;

}

API定义如下:

Observable<JsonOrderList> orderApi.orderList(before, after, limit, state)

我要filter/processList<Order> data然后returnJsonOrderList

orderApi.orderList(before, after, limit, state){
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//How to process List<Order> data

.subscribe(new Action1<JsonOrderList>() {
    @Override
    public void call(JsonOrderList rpOrderList) {
        pushSuccessData(ID_GET_ORDER_LIST, rpOrderList);
    }
}, new Action1<Throwable>() {
    @Override
    public void call(Throwable throwable) {
        pushErrorData(ID_GET_ORDER_LIST, throwable);
    }
}));

编辑:

doOnNext(new Action1<JsonOrderList>() {
        @Override
        public void call(JsonOrderList jsonOrderList) {
            //can i use rxjava operator replace loop
            for(Order order : jsonOrderList.data){
                order.setBuyer(goodsApi.getBuyer(order.getBuyerId));
            }
        }
})

goodsApi.getBuyer(id)请求服务器获取买家信息

Could I use rxjava operator replace loop??

使用.map运算符:

orderApi.orderList(before, after, limit, state)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .map(new Func1<List<Order>, JsonOrderList>() {
            @Override
            public JsonOrderList call(List<Order> orders) {
                JsonOrderList jsonOrderList = new JsonOrderList();
                // ... do some stuff to fill jsonOrderList
                return jsonOrderList;
            }
        })
        .subscribe(new Action1<JsonOrderList>() {
            @Override
            public void call(JsonOrderList rpOrderList) {
                pushSuccessData(ID_GET_ORDER_LIST, rpOrderList);
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                pushErrorData(ID_GET_ORDER_LIST, throwable);
            }
        });

编辑:

经过对问题的进一步解释,我建议你使用下面的代码。

我建议您不要使用 .filter(...) 运算符,因为它会改变您的流(您会在 subscribe 中得到不同的对象)。

orderApi.orderList(before, after, limit, state)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnNext(new Action1<JsonOrderList>() {
            @Override
            public void call(JsonOrderList jsonOrderList) {
                //do something with jsonOrderList.data
            }
        })
        .subscribe(new Action1<JsonOrderList>() {
            @Override
            public void call(JsonOrderList rpOrderList) {
                pushSuccessData(ID_GET_ORDER_LIST, rpOrderList);
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                pushErrorData(ID_GET_ORDER_LIST, throwable);
            }
        });