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}”
}