RxJava2中是否有任何运算符可以应用从Flowable到Single或Maybe的转换?我的意思是Flowable.compose()操作符将Transformer应用于Flowable并返回另一个Flowable。但是,我需要应用一个转换器,它可以将Flowable转换为Single或Mabye,并且可以在应用程序中多次重用,而不需要"断链“。
示例(以Kotlin表示):
fun processFirstEven(f: Flowable<Int>): Maybe<Int> {
return f.filter { i -> i % 2 == 0 }.take(1).singleElement().map { s -> s * 12 }
}
val f: Maybe<Int> = Flowable
.fromArray(1, 3, 5, 6, 7, 8, 9)
.compose(::processFirstEven) // Does not compile发布于 2019-02-03 04:13:27
我认为没有办法在一条线上完成这种复杂的转换。看起来这对我来说已经很简单了:
fun takeFirstEven(f: Flowable<Int>): Flowable<Int> {
return f.filter { i -> i % 2 == 0 }.take(1)
}
val f: Maybe<Int> = Flowable
.fromArray(1, 3, 5, 6, 7, 8, 9)
.compose(::takeFirstEven)
.singleElement()好消息是,如果您的目标只是可重用性,那么您可以使用Kotlin函数可拓特征来做到这一点。
将此代码放在您的代码可以访问的地方:
fun <T> Flowable<T>.toMaybe(filter: (T) -> Boolean): Maybe<T> {
return this.filter(filter).take(1).singleElement()
}然后,您可以简单地将toMaybe与任何您想要的过滤器一起使用。
fun evenFilter(i: Int) = (i % 2) == 0
val f: Maybe<Int> = Flowable
.fromArray(1, 3, 5, 6, 7, 8, 9)
.toMaybe(::evenFilter)https://stackoverflow.com/questions/54498104
复制相似问题