java—任何可以平面Map并返回两个输出的rx运算符

omhiaaxx  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(330)

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

fun getSources(): Single<Sources>
fun getTopHeadlines(sourceCsv: String): Single<TopHeadlines>

现在我在做这个

getSources()
    .map { sources -> 
        // convert the sources list to a csv of string 
    }
    .flatMap { sourcesCsv
        getTopHeadlines(sourcesCsv)
    }
    .subsribe {topHeadlines, error -> }

如果我的目标是登上头条新闻的话,这样做很好。但我想得到的是订阅时的来源和头条新闻?有没有我不知道的接线员,或者有没有其他方法来做同样的事情?

klsxnrf1

klsxnrf11#

你可以用 zip() 方法来执行此操作。zip等待这两个项目,然后发出所需的值。你可以这样用

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) }
        )
    }

当你订阅这个时,两个值都是成对的。你可以为它做一个扩展函数,让你的生活更轻松:

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() 方法。

相关问题