0


Kotlin Flow 转换以及上下游处理

本片文章主要介绍Flow上下游处理,上游一个Flow使用map,上游两个Flow使用zip,上游三个Flow及以上使用combine

1、下面代码展示了upStreamFlow作为上游,downStreamFlow作为下游,通过对upStreamFlow使用map操作符函数将upStreamFlow转换为新的Flow对象,每个元素都通过lambda表达式进行处理,并生成以“Number:”为开头的字符串。

  1. package com.cqz
  2. import kotlinx.coroutines.flow.*
  3. suspend fun main() {
  4. val upStreamFlow: Flow<Int> = flow {
  5. for (i in 1..5) {
  6. emit(i)
  7. }
  8. }
  9. val downStreamFlow: Flow<String> = upStreamFlow.map {
  10. "Number:$it"
  11. }
  12. upStreamFlow.collect {
  13. println("upStreamFlow:$it")
  14. }
  15. downStreamFlow.collect {
  16. println("downStreamFlow:$it")
  17. }
  18. }

运行以上代码将会得到以下结果

  1. upStreamFlow:1
  2. upStreamFlow:2
  3. upStreamFlow:3
  4. upStreamFlow:4
  5. upStreamFlow:5
  6. downStreamFlow:Number:1
  7. downStreamFlow:Number:2
  8. downStreamFlow:Number:3
  9. downStreamFlow:Number:4
  10. downStreamFlow:Number:5

2、上游两个Flow可以使用zip操作符函数将两个Flow合并为新的Flow对象。这个函数接受两个asdFlow作为参数,并通过lambda表达式将它们的元素进行组合。

  1. package com.cqz
  2. import kotlinx.coroutines.flow.*
  3. suspend fun main() {
  4. val upStreamFlow: Flow<Int> = flow {
  5. for (i in 1..5) {
  6. emit(i)
  7. }
  8. }
  9. val upStream2Flow: Flow<Int> = flow {
  10. for (i in 6..10) {
  11. emit(i)
  12. }
  13. }
  14. upStreamFlow.zip(upStream2Flow) { num1,num2->
  15. num1 + num2
  16. }.collect {
  17. println("zip:$it")
  18. }
  19. }

运行以上代码将会得到以下结果

  1. zip:7
  2. zip:9
  3. zip:11
  4. zip:13
  5. zip:15

3、上游有三个Flow或以上的时候可以使用combine操作符函数,将三个Flow合并为一个Flow

  1. package com.cqz
  2. import kotlinx.coroutines.flow.*
  3. suspend fun main() {
  4. val flow1 = flowOf(1,2,3)
  5. val flow2 = flowOf(false,true,false)
  6. val flow3 = flowOf("A","B","C")
  7. val combinedFlow = combine(flow1,flow2,flow3) {i, b, s ->
  8. CombinedResult(i,b,s)
  9. }
  10. combinedFlow.collect {
  11. println("combinedFlow:$it")
  12. }
  13. }
  14. data class CombinedResult(val i: Int,val b: Boolean,val str: String)

运行以上代码将会得到以下结果

  1. combinedFlow:CombinedResult(i=1, b=false, str=A)
  2. combinedFlow:CombinedResult(i=2, b=false, str=A)
  3. combinedFlow:CombinedResult(i=2, b=true, str=A)
  4. combinedFlow:CombinedResult(i=2, b=true, str=B)
  5. combinedFlow:CombinedResult(i=3, b=true, str=B)
  6. combinedFlow:CombinedResult(i=3, b=false, str=B)
  7. combinedFlow:CombinedResult(i=3, b=false, str=C)
标签: kotlin java 前端

本文转载自: https://blog.csdn.net/I_can_move_you/article/details/132509012
版权归原作者 chen_qing_zhen 所有, 如有侵权,请联系我们删除。

“Kotlin Flow 转换以及上下游处理”的评论:

还没有评论