如何将Observable对象映射到Flowable <! - ? - >?

时间:2017-10-02 15:32:40

标签: android observable rx-java2

 private Observable< SimpleResource > resource;
 return resource.map(new Function<SimpleResource, Flowable<Data>>() {
  @Override
  public Flowable< Data > apply(SimpleResource resource) throws Exception {
    return resource.data().toFlowable();
  }
});


  Single<Data> data();

我需要Flowable但我的结果是Observable&gt;

2 个答案:

答案 0 :(得分:1)

你做错了是将.toFlowable应用于不正确的位置。

Observable.fromCallable { 1 }.map {
    it * 2
}.toFlowable(BackpressureStrategy.BUFFER)

如果您有data返回的不同数据类型(抱歉Kotlin,但概念相同)

data class A(
        val data: Single<Int>
) {
    constructor() : this(data = Single.fromCallable { 1 })
}


val result: Flowable<Int> = Flowable
        .fromCallable {
            A()
        }
        .flatMap {
            it.data.toFlowable()
        }

答案 1 :(得分:1)

由于您提到data()返回Single,因此您需要将所有单个流转换为一个大流。要将流转换为流,我们通常使用flatmap运算符:

resource.flatMapSingle(
            new Function<SimpleResource, Single<Data>>() {
                @Override
                public Single<Data> apply(SimpleResource resource) throws Exception {
                    return resource.data();
                }
            }
    ).toFlowable(BackpressureStrategy.BUFFER);