Kotlin Reactor:在将zipWhen与另一个元组一起使用之后,如何获得一个平坦的元组?

Kotlin Reactor:在将zipWhen与另一个元组一起使用之后,如何获得一个平坦的元组?,kotlin,reactive-programming,project-reactor,Kotlin,Reactive Programming,Project Reactor,当我链接多个zipWhen调用时,结果将是Tuble2而不是Tuple3。这会随着后续的zipWhen而变得更糟 例如: val getFoo() .zipWhen{foo-> getBar(foo) } .zipWhen{fooBar-> getBam(fooBar.t1、fooBar.t2) } doOnNext{fooBarBam-> log.debug{“foo:${fooBarBam.t1.t1}” log.debug{“bar:${fooBarBam.t1.t2}” log.debu

当我链接多个
zipWhen
调用时,结果将是
Tuble2
而不是
Tuple3
。这会随着后续的
zipWhen
而变得更糟

例如:

val getFoo()
.zipWhen{foo->
getBar(foo)
}
.zipWhen{fooBar->
getBam(fooBar.t1、fooBar.t2)
}
doOnNext{fooBarBam->
log.debug{“foo:${fooBarBam.t1.t1}”
log.debug{“bar:${fooBarBam.t1.t2}”
log.debug{“bam:${fooBarBam.t2}”
}

在doOnNext中获得Tubble3的最优雅和可重复使用的方式是什么?

我想展示自己投票的最明显方式是:

.map{
元组(it.t1.t1,it.t1.t2,it.t2)
}
以及提取一个函数

funflattuple(t:Tuple2):Tuple3=
(t.t1.t1,t.t1.t2,t.t2)的元组
// ...
.map{flatTuple(it)}
您可以这样使用:

getFoo()
.zipWhen{foo->getBar(foo)}
.zipWhen({t->getBam(t.t1,t.t2)},{a,b->Tuples.of(a.t1,a.t2,b)})
doOnNext{fooBarBam->
log.debug{“foo:${fooBarBam.t1}”
log.debug{“bar:${fooBarBam.t2}”
log.debug{“bam:${fooBarBam.t3}”
}