首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Flowable.compose()转换为单个或可能

将Flowable.compose()转换为单个或可能
EN

Stack Overflow用户
提问于 2019-02-02 22:24:09
回答 1查看 2K关注 0票数 1

RxJava2中是否有任何运算符可以应用从FlowableSingleMaybe的转换?我的意思是Flowable.compose()操作符将Transformer应用于Flowable并返回另一个Flowable。但是,我需要应用一个转换器,它可以将Flowable转换为SingleMabye,并且可以在应用程序中多次重用,而不需要"断链“。

示例(以Kotlin表示):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-02-03 04:13:27

我认为没有办法在一条线上完成这种复杂的转换。看起来这对我来说已经很简单了:

代码语言:javascript
复制
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函数可拓特征来做到这一点。

将此代码放在您的代码可以访问的地方:

代码语言:javascript
复制
fun <T> Flowable<T>.toMaybe(filter: (T) -> Boolean): Maybe<T> {
    return this.filter(filter).take(1).singleElement()
}

然后,您可以简单地将toMaybe与任何您想要的过滤器一起使用。

代码语言:javascript
复制
fun evenFilter(i: Int) = (i % 2) == 0

val f: Maybe<Int> = Flowable
    .fromArray(1, 3, 5, 6, 7, 8, 9)
    .toMaybe(::evenFilter)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54498104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档