Kotlin RxJava返回单个,在之后执行completable

Kotlin RxJava返回单个,在之后执行completable,kotlin,rx-java,rx-java2,Kotlin,Rx Java,Rx Java2,我试图完成以下工作:以单个数据返回一些数据,然后执行completable。由于single.andThen()的原因,以下代码无法编译。操作需要按此顺序执行 val single = Single.create<String> { it.onSuccess("result") } val completable = Completable.create { println("executing cleanup") } val together = single.andThen(co

我试图完成以下工作:以单个数据返回一些数据,然后执行completable。由于single.andThen()的原因,以下代码无法编译。操作需要按此顺序执行

val single = Single.create<String> { it.onSuccess("result") }
val completable = Completable.create { println("executing cleanup") }
val together = single.andThen(completable)

together.subscribe(
        { println(it) },
        { println(it) }

)
val single=single.create{it.onSuccess(“result”)}
val completable=completable.create{println(“正在执行清理”)}
val合在一起=单个。然后(可完成)
一起订阅(
{println(it)},
{println(it)}
)

使用
flatMap

single.flatMap(v -> completable.andThen(Single.just(v)))

如果有人对RxSwift解决方案的应用程序感兴趣:

saveObjectsA().flatMap { (objectsA: [A]) -> Single<Bool> in
        B.objects = objectsA
        return completable.andThen(Single.just(true))
    }
saveObjectsA().flatMap{(objectsA:[A])->单输入
B.objects=objectsA
返回completable.and(Single.just(true))
}

saveObjectsA返回一个单数,它是B的属性(以前创建的)。在保存B之前,我需要先保存它。

请注意,如果您不关心结果是单一的还是可完成的,则RxJava2中有一个特殊的
flatMapCompletable
操作符,可在单一后执行Completable:


single.flatMapCompletable(结果->可完成)

假设您确实希望在完成后返回单曲,下面是另一种方法:

使用Java:

single.flatMap(x -> completable.toSingleDefault(x))
使用Kotlin:

single.flatMap { completable.toSingleDefault(it) }

简单而优雅的tnx此操作返回一个可完成的
。最初的问题希望它返回一个
单曲
@DouglasKazumi这行吗
val-together=single.flatMap{result->completable.then(single.just(result))}
@varakalinna是的!这正是他们的建议。我更喜欢。@DouglasKazumi好的,你是对的:)如果你真的关心返回类型(单次),我的答案是不正确的。编辑了我的答案