RxJava - 映射Observable并不会返回所有排放

时间:2015-10-14 17:04:09

标签: rx-java

我有一个对象数组(有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.我在这看错了什么?

1 个答案:

答案 0 :(得分:1)

因为你正在使用concatMap,所以当你的内部流终止时,操作符只会考虑第二个数组元素。

在您的情况下,它永远不会终止,因为您不会在subscriber.onComplete();之后致电onNext

请注意,根据您的代码与此示例的接近程度,您最好写一下:

Observable.from(array).map(ta -> new TypeB());

或(如果确实需要concatMap):

Observable.from(array).concatMap(ta -> Observable.just(new TypeB()));