我有一个对象数组(有36个对象),我正在创建一个observable。然后我尝试将它映射到另一种类型......但是,只发生一次发射。 任何人都可以帮助我:
TypeA[] array = new TypeA[];
// filling array
return Observable.from(array)
.concatMap(new Func1<TypeA, Observable<? extends TypeB>>() {
@Override
public Observable<? extends TypeB> call(TypeA typeA) {
return Observable.create(new Observable.OnSubscribe<TypeB>() {
@Override
public void call(Subscriber<? super TypeB> subscriber) {
Log.d("Here");
subscriber.onNext(new TypeB());
}
});
}
});
当我订阅它时,它只打印一次“Here”,尽管对象的数组大小为36.我在这看错了什么?
答案 0 :(得分:1)
因为你正在使用concatMap
,所以当你的内部流终止时,操作符只会考虑第二个数组元素。
在您的情况下,它永远不会终止,因为您不会在subscriber.onComplete();
之后致电onNext
。
请注意,根据您的代码与此示例的接近程度,您最好写一下:
Observable.from(array).map(ta -> new TypeB());
或(如果确实需要concatMap):
Observable.from(array).concatMap(ta -> Observable.just(new TypeB()));