Kotlin 将Completable转换为Single的规范方法?
我有一个RxJavaKotlin 将Completable转换为Single的规范方法?,kotlin,rx-java,Kotlin,Rx Java,我有一个RxJava可完成的,我想执行它,然后链接到一个单一的。我可以这样写: return Completable.complete().toSingleDefault(0L).flatMap { Single.just(1L) } 但这似乎不必要地复杂。我本以为Completable#toSingle()可以完成这项工作,但如果我写: Completable.complete().toSingle { Single.just(1L) } 我会犯错误。Completable中是否缺少函数,
可完成的
,我想执行它,然后链接到一个单一的
。我可以这样写:
return Completable.complete().toSingleDefault(0L).flatMap { Single.just(1L) }
但这似乎不必要地复杂。我本以为Completable#toSingle()
可以完成这项工作,但如果我写:
Completable.complete().toSingle { Single.just(1L) }
我会犯错误。
Completable
中是否缺少函数,或者我忽略了什么?您可能想使用Operator,它将在Completable
完成后订阅您发送给它的源代码
return Completable.complete()
.andThen(Single.just(1L))
正如@akarnokd所说的,这是一个暴力的例子
如果您的源代码需要在运行时解析,这将是一个问题,您需要延迟它:
return Completable.complete()
.andThen(Single.defer(() -> Single.just(1L)))
请阅读这篇文章。事实上,这不是我需要的,但确实为我指明了正确的方向。我需要的是延续-我需要在运行时对单个源代码求值,而不是在汇编时求值,所以。然后(Single.defer{lfmap.count()})
。我使用了just(1)
作为一个例子,但事实上,我的单个源代码在完成Completable之后才能进行计算。所以我想要的是这样的扩展:fun Completable.ThenSSingle(singleSource:()->Single):Single{return Single.defer(singleSource)}
,这样我就可以编写。ThenSSingle{lfmap.count()}
很酷,很高兴它能帮上忙。为了完整性(双关语)的缘故编辑了我的答案。如果使用Kotlin,则只需(单位)即可,然后
将返回组合函数返回的任何结果。在本例中,它是returnSingle.just(1L)
,因此您可以从中得到一个Single
。