我有以下对象结构
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调用。对象C
的imageUrl
字段是null
,我必须通过进行另一个改造api调用来更新。我想使用RxJava在Observable<Object1>
中的C[]
中更新每个Object
C
的imageUrl。如何使用RxJava操作符?
我希望该方法返回更新的Observable<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);
}
我不是RxJava的专家,但是像这样如何:
observable
.flatMap(Observable.from(object1.item3))
.flatMap(//do request and mix object)
.collect()
.filter(//map the new array to he object1)