RxJava2 Convert Flowable to Single
In my case, I actually had a Flowable and wanted the benefits of that (i.e. backpressure), but I still wanted to return a Single
, e.g. Single<List<String>>
. In my case, I was using Android WorkManager's RxWorker
which expects my function to return Single<Result>
, not a Flowable.
In this case,
val flowable = Flowable.just("my flowable")
return flowable.toList() // type: Single<List<String>>
or if you wanted to return a specific value because you don't care about the flowable output:
return flowable.toList().map {} // returns unit
return flowable.toList().map { "Hello" } // returns String
return flowable.toList().map { Result.success() } // returns Result
Ok so thanks to @akarnokd I found the answer as you can see in the comments.
Teaching me how to fish rather than giving me the straight answer he suggested looking here: http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html (which really I should have done in the first place!).
Looking there I found firstOrError()
which solves my problem.
Even though the object I was calling toSingle()
from was a Flowable, the IDE didn't complain. Yet looking at the link above, toSingle()
isn't even a valid option!