这是创建Flow的最简单的方式,有两个,一个是flowOf用于从固定数量的元素创建,多用于示例,实际中基本上用不到: valsimple = flowOf("Hello","world","of","flows!") simple.collect { println(it) } 或者,通过asFlow把现有的集合转为Flow,这个还是比较实用的: listOf("Hello","world","of","flows!")....
toList() // [1, 2, 3] 缓存操作符 1、 buffer: 使用缓冲区对流中的发射和收集进行解耦。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 flow { emit(1) emit(2) }.buffer().collect { println(it) } // Prints 1, 2 2、 conflate: 仅保留最后一个未处理的值,提高处理的效率。 代码...
末端操作符 指的是 在 Flow 流最末端 调用 挂起函数 收集元素 的操作符 , 最常见的 末端操作符 就是 collect 操作符 ; 常见的末端操作符 : 收集元素 : collect ; 将收集的元素转为集合 : toList , toSet ; 收集第一个元素 : first ; 发射单个元素 : single ; 规约流到单个值 : reduce , fold ;...
println("listof: $it") } ``` 通过以上对比发现,两者的基本操作几乎一致,Kotlin也提供了两者相互转换的API,Flow.toList()、List.asFlow()这两个扩展函数,让数据在 List、Flow 之间来回转换,示例代码如下: ``` //flow 转list flowOf(1,2,3) .toList() .filter { it > 1 } .map { it * 2 } ...
简介Kotlin的Flow是Kotlin在异步编程方面的一个重要组件,它提供了一种声明式的、可组合的、基于协程的异步编程模型。Flow 的设计灵感来自于Reactive Streams、RxJava、Flux和其他异步编程库,但它与Kotlin协程无缝集成,并提供了一种更具Kotlin特性的 API。
Flow 和 List 互转 在某些场景下,我们可以把 Flow 当做集合来使用,或者反过来,把集合当做 Flow 来用。 kotlin vallist: List<Int> = flowOf(1,2,3,4,5).toList()valflow: Flow<Int> = listOf(1,2,3,4,5).asFlow() 中间操作符 中间操作符(Intermediate Operators),除了之前提到的 map、filter、tak...
valthirdFlow = listOf(5,6).asFlow() // 挨个收集,消费者 firstFlow.collect { println(it) } secondFlow.collect { println(it) } thirdFlow.collect { println(it) } } 从这段代码中我们可以发现,Flow 的创建方式多样,如使用flowOf、flow、as...
将结果转换为List。 flow { emit(1) emit(1) } .toSet().forEach{value-> print(value) } // 1 toSet 将结果转换为Set。 flow { emit(1) emit(1) } .toSet().forEach{value-> print(value) } // 1 launchIn 直接触发流的执行,不设置action,入参为coroutineScope 一般不会直接调用,会搭配别...
asFlow:将其他数据转换成Flow,一般是集合向Flow的转换,如listOf(1,2,3).asFlow()。 callbackFlow:将基于回调的 API 转换为Flow数据流 回调操作符 onStart:上游flow{}开始发送数据之前执行 onCompletion:flow数据流取消或者结束时执行 onEach:上游向下游发送数据之前调用,每一个上游数据发送后都会经过onEach() ...
Flow 的构造方法有如下几种: 1、flowOf()方法。用于快速创建流,类似于listOf()方法,下面是它的源码: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 //code 2publicfun<T>flowOf(vararg elements:T):Flow<T>=flow{for(elementinelements){emit(element)}} ...