Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 将Completable转换为Single的规范方法?_Kotlin_Rx Java - Fatal编程技术网

Kotlin 将Completable转换为Single的规范方法?

Kotlin 将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中是否缺少函数,

我有一个RxJava
可完成的
,我想执行它,然后链接到一个
单一的
。我可以这样写:

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
,则只需(单位)即可,然后
将返回组合函数返回的任何结果。在本例中,它是return
Single.just(1L)
,因此您可以从中得到一个
Single