将 Future<void> 转换为 RxJava Observable 或 Flowable

Converting a Future<void> into RxJava Observable or Flowable

如何将 future returning void 转换为 RxJava Flowable 或 Observable?

我正在使用 RxJava 和 AndroidX WorkManager,它提供了 API,return 是 Future<void>。我知道 RxJava 不处理空值,会立即出现 NullPointerException。我正在使用 Flowable.fromFuture(resultFuture),其中 resultFuture 是 Future<Void>(特别是 ListenableFuture<Void>),但由于它 returns Null,它使应用程序崩溃。

动机:我想把这个未来变成一个 Rx 可观察/可流动的,这样我就可以在这个未来完成后进行处理。

        return Flowable.fromFuture(futureReturningVoid)
                .flatMap { Flowable.fromIterable(files) }
                ...more processing here...

我需要在最后 return 一个 Single,所以我无法将工作转移到监听器中,Future.addListener


我需要可流动的,因为我正在处理多个输入文件,并希望背压防止一次打开太多文件。我包含了 Observable,以防人们的需求不那么复杂。

那为什么不呢:

return Completable.fromFuture(futureReturningVoid)
            .andThen(Flowable.fromIterable(files))

基本上是:

return Completable.fromAction { futureReturningVoid.get() }
            .andThen(Flowable.fromIterable(files))