首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >任何可以FlatMap并返回输出的Rx运算符

任何可以FlatMap并返回输出的Rx运算符
EN

Stack Overflow用户
提问于 2021-01-09 16:09:13
回答 2查看 46关注 0票数 0

我想知道是否有适合我的用例的RxJava运算符。我有以下两种方法。这些是改装的接口。

代码语言:javascript
运行
复制
fun getSources(): Single<Sources>
fun getTopHeadlines(sourceCsv: String): Single<TopHeadlines>

目前我正在做这件事

代码语言:javascript
运行
复制
getSources()
    .map { sources -> 
        // convert the sources list to a csv of string 
    }
    .flatMap { sourcesCsv
        getTopHeadlines(sourcesCsv)
    }
    .subsribe {topHeadlines, error -> }

如果我的目标是获得头条新闻的话,这是非常有效的。但我想要的是订阅它的同时获得来源和头条新闻?有没有我不知道的运算符,或者有没有其他方法来做同样的事情?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-09 21:11:59

您可以使用zip()方法来完成此操作。zip等待这两个项目,然后发出所需的值。您可以像这样使用它

代码语言:javascript
运行
复制
getSources()
    .map { sources -> 
        // convert the sources list to a csv of string 
    }
    .flatMap { sourcesCsv ->
        Single.zip(
            Single.just(sourcesCsv),
            getTopHeadlines(sourcesCsv),
            BiFunction { t1, t2 -> Pair(t1, t2) }
        )
    }

然后,当你订阅它时,你就拥有了这两个值作为一对。你可以为它做一个扩展函数,让你的生活变得更简单:

代码语言:javascript
运行
复制
fun <T, V> Single<T>.zipWithValue(value: V) = Single.zip(
    Single.just(value),
    this,
    { t1, t2 -> Pair(t1, t2) }
)

在你的flatMap中,你可以执行getTopHeadlines(sourcesCsv).zipWithValue(sourcesCsv)。对于Maybe也可以这样做,对于Flowabale可以使用combineLatest()方法。

代码语言:javascript
运行
复制
票数 1
EN

Stack Overflow用户

发布于 2021-01-10 00:54:39

作为对莫森答案的补充:

你不需要拉上拉链。只需在flatMap中使用另一个map操作符,并将两个值组合为一个Pair,就像我在本例中所做的那样:

代码语言:javascript
运行
复制
import io.reactivex.rxjava3.core.Single
import org.junit.jupiter.api.Test

class So65640603 {
    @Test
    fun `65640603`() {
        getSources()
            .flatMap { source -> getTopHeadlines(source).map { headLines -> source to headLines } }
            .test()
            .assertValue("v1" to 42)
    }
}

fun getSources(): Single<String> {
    return Single.just("v1")
}

fun getTopHeadlines(sourceCsv: String): Single<Int> {
    return Single.just(42)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65640603

复制
相关文章

相似问题

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