如何应用 RxJava 操作符?

How to apply a RxJava operator?

我有以下对象结构

class Object1 {
  A[] item1;    //array of Object A
  B[] item2;    //array of Object B
  C[] item3;    //array of Object C
}

class C {
  int value1;
  int value2;
  String imageUrl; //null, to be updated from a api call
}

我接到一个 Observable<Object> 进行改造 api 的电话。对象 CimageUrl 字段是 null,我必须通过另一个改造 api 调用来更新它。我想使用 RxJava 为每个 Object C in C[] in Observable<Object1> 更新 imageUrl。我如何使用 RxJava 运算符来做到这一点?

我想要 return 更新后的方法 Observable<Object1>

我不是 RxJava 方面的专家,但是像这样的东西怎么样:

observable
    .flatMap(Observable.from(object1.item3))
    .flatMap(//do request and mix object)
    .collect()
    .filter(//map the new array to he object1)

这应该有效:

getObject1()
        .flatMap(obj1 -> Observable.from(obj1.item3)
                .cast(C.class)
                .flatMap(item -> getImageUrl(item.value1).doOnNext(url -> item.imageUrl = url))
                .toList()
                .map(items -> obj1))

出于测试目的,我的 getImageUrl 看起来像这样:

Observable<String> getImageUrl(int id) {
    return Observable.just(String.format("id = %d", id));
}

它看起来像这样:

Observable<String> getImageUrl(int id) {
    return api.getImageUrl(id).map(SomeResponse::getImageUrl);
}