如何在 kotlin 中结合挂起函数和流的结果?

Posted

技术标签:

【中文标题】如何在 kotlin 中结合挂起函数和流的结果?【英文标题】:How to combine results from a suspend function and a flow in kotlin? 【发布时间】:2021-12-28 15:18:48 【问题描述】:

大家想象我有这两个数据来源:

val flowA: Flow<String>
suspend fun funB(): Int

如何将两者的结果组合成一个流程(比如Flow&lt;Pair&lt;String, Int&gt;&gt;)?

下面的方法怎么样?有没有更好的办法?

combine(
  flowA,
  flow emit(funB())
)  a, b ->
  ...

【问题讨论】:

你想把同一个 Int 和所有字符串放在一起吗? 【参考方案1】:

假设您希望与flowA 中的每个字符串配对相同的Int,您可以按如下方式进行:

val funBResult = funB()
val pairs = flowA.map  it to funBResult 

如果funB() 实际上是一个将String 作为参数的函数,您可以执行以下操作:

val pairs = flowA.map  it to funB(it) 

【讨论】:

以上是关于如何在 kotlin 中结合挂起函数和流的结果?的主要内容,如果未能解决你的问题,请参考以下文章

kotlin 升级到 1.6.0 后如何在 Room Dao 中使用挂起修饰符?

用于列表和流的 memq

Kotlin结合Spring WebFlux实现响应式编程

深入理解Kotlin协程如何将回调改写成挂起函数

Kotlin 挂起函数在调用 java 时丢失 ReactiveSecurityContext

Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )