Flowable.compose()转变为单次或可能

问题描述 投票:0回答:1

是否有任何RxJava2运营商可以从Flowable应用转换到SingleMaybe?我的意思是Flowable.compose()经营者申请一个TransformerFlowable并返回另一个Flowable。但我需要应用其中Flowable转换成SingleMabye并且可以进一步在我的应用程序,而“breaking the chain”多次重复使用的变压器。

实施例(在科特林):

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
java kotlin rx-java2 reactivex
1个回答
0
投票

我不认为有一种方法可以做这种复杂的转换在一个单一的线。看起来这已经是很简单对我来说:

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's function extension feature做到这一点。

将这个代码的地方你的代码可以访问:

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)
© www.soinside.com 2019 - 2024. All rights reserved.