如何应用 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 的电话。对象 C
的 imageUrl
字段是 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);
}
我有以下对象结构
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 为每个 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);
}