比方说,我有一个流动对象,已订阅了某些视图,并且正在侦听更改。我想添加一个仅基于flowable的第一个发射的自定义方法,而且还要保留其他方法来监听更改。最好的解决方法是什么? 我天真的方法是复制可流动对象并将其转换为“单一”或“可完成”以获得结果,但是这似乎是多余的。
谢谢。
答案 0 :(得分:0)
使用.take(1)
。 BTW还确保可共享流(否则某些观察者将错过事件)。
答案 1 :(得分:0)
我认为您可以使用share
运算符。 Share
运算符使Connectable可观察。然后,Connectable Observable发布每个订阅的项目。
val o = Flowable.fromArray(1, 2, 3, 4, 5)
.map {
println("heavy operation")
it + it
}
.share() // publish the changes
.subscribeOn(Schedulers.computation()) // for testing. change what you want
o.take(1).subscribe { println("Special work: $it") } // take one
o.subscribe { println("Normal work: $it") }
结果
heavy operation
Special work: 2
Normal work: 2
heavy operation
Normal work: 4
heavy operation
Normal work: 6
heavy operation
Normal work: 8
heavy operation
Normal work: 10