我是RxJava/RxAndroid的新手但是我的用例很困难.
我尝试迭代a List
将每个A
转换为B
异步(因为它需要调用数据库),我Observer
应该在每次成功转换(in onNext()
)时通知我在主线程上做一些工作.
我成功地设法转换整个列表,然后收到我的List
,onNext()
但我需要收到每个项目的通知,而不是所有项目完成后.
我试图与运营商的东西from
,但如果我用from(List)
我的Observer
必须是同一类型(receivied对象A
,而不是B
).
以下是我的代码如何将整个转换List
为list
我应该在这里更改的内容?
private List listOfA;
private startConversion() {
Observer observer = new Observer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(List convertedItems) {
onConversionCompleted(convertedItems);
}
};
Observable observervable = Observable.fromCallable(new Callable>() {
@Override
public List call() throws Exception {
return convertListOfAToListOfB(listOfA);
}
});
subscription = observable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
PS:这是伪代码.
感谢帮助 !
如果你想在单独的线程中逐个转换每个项目,你可以这样做.
Observable.from(list) .map(input -> { // transform each A -> B }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(item -> { });
如果你已经有了可观察的发射列表并希望将其转换为序列,请使用:
listObservable .flatMap(Observable::from) .subscribe(item -> { });
如果你想结合这两种方式并在一个地方转换所有值但是逐个发出它们你可以这样做:
Observable.create(subscriber -> { for (Item item : items) { subscriber.onNext(transformA2B(item)); } subscriber.onCompleted(); });