RxJava2将Flowable转换为Single

时间:2018-02-27 22:49:34

标签: android rx-java2

如何将Flowable转换为Single?或者,如果还有另一种方法可以让它在第一个感兴趣的响应之后停止发光。

我试过这个,但它似乎不起作用:

  disposables.add(
        repository.getAllSomethings()
           .subscribeOn(SchedulerProvider.getInstance().computation())
           .observeOn(SchedulerProvider.getInstance().ui())
           .toSingle()
           .subscribeWith(object : DisposableSingleObserver<List<Something>>() {
                override fun onSuccess(t: List<Something>) {
                }

                override fun onError(e: Throwable) {
                }
            })

getAllSomethings()返回Flowable<List<Something>>

在上面的代码.subscribeWith()中用红色加下划线表示:

Type parameter bound for E in 
fun <E : SingleObserver<in Flowable<List<Something>!>!>!> subscribeWith(observer: E!): E!
is not satisfied: inferred type  ! is not a subtype of SingleObserver<in Flowable<List<Something>!>!>!

2 个答案:

答案 0 :(得分:15)

好的,感谢@akarnokd我在评论中找到了答案。

教我如何钓鱼,而不是给我他建议在这里看到的直接答案:http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html(我本来应该做的第一个!)。

在那里我发现LIMIT 1解决了我的问题。

即使我从firstOrError()调用的对象是Flowable,IDE也没有抱怨。然而,看看上面的链接,toSingle()甚至不是一个有效的选项!

答案 1 :(得分:0)

就我而言,我实际上有一个 Flowable 并且想要它的好处(即背压),但我仍然想返回一个 Single,例如Single<List<String>>。就我而言,我使用的是 Android WorkManager 的 RxWorker,它希望我的函数返回 Single<Result>,而不是 Flowable。

在这种情况下,

val flowable = Flowable.just("my flowable")
return flowable.toList() // type: Single<List<String>>

或者如果你想返回一个特定的值,因为你不关心可流动的输出:

return flowable.toList().map {} // returns unit
return flowable.toList().map { "Hello" } // returns String
return flowable.toList().map { Result.success() } // returns Result