IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin 系列 之 Flow(二)中间运算符 -> 正文阅读

[移动开发]Kotlin 系列 之 Flow(二)中间运算符

Hello I`am Flow ,Welcome to Flow Unit 2

说到 中间运算符 ,用过 RxJava 的同学可能会想,难道是命运的安排 ?

我想说:这就是命啊!~ 他两的关系就是 (PX剑谱 和 KH宝典)

PS:Flow 的中间 运算符内的代码块 是可以 调用挂起函数

Example 1 (耳熟能详的 map 、filter)

map :对结果进行加工后继续向后传递

filter : 对待操作的值 进行过滤

private suspend fun myMapFun(input:Int): String {
    delay(1000)
    return "output: $input"
}

fun main() = runBlocking {
    (1..4).asFlow()
        .filter{ it > 2}
        .map{input-> myMapFun(input)}
        .collect{ println(it)}

}

结果打印:		"output: 3"  
				"output: 4"

Example 2 (清清白白的 tranform)

上面的mapfilter 都有自身特定的功能(小爷我干这活贼6,但是别的不会 - -!)

transform :没有附加功能,白纸一张,码农咋写 咱咋发射。

private suspend fun myFun(input:Int): String {
    delay(1000)
    return "output: $input"
}

fun main() = runBlocking {
    (1..2).asFlow()
        .transform{input ->
            emit("hello $input")
            emit("world $input")
            emit(myFun(input))
        }
        .collect{ println(it)}

}
结果打印:		"hello: 1"  
				"world: 1"
				"output: 1"

				"hello: 2"  
				"world: 2"
				"output: 2"

Example 2 (适可而止的 take)

take 会限制 emit() 发射的次数 (你想发射就发射?)

PS:take 的入参 <= emit 发射的次数时,会抛出异常

fun myNumber() = flow {
    try {
        emit(1)
        println("hello")
        emit(2)
        println("world")
        emit(3)
    }catch (ex:Exception){
        println(ex)
    }finally {
        println("finally")
    }
}

fun main() = runBlocking {
    myNumber().take(2).collect{ println(it)}
}

结果打印:		"1"
				"hello"
				"2"
				"kotlinx.coroutines.flow.internal.AbortFlowException:....."
				"finally"

collect 之外的【终止操作】

终止操作:才会真正的执行 flow

有 collect 、toList、toSet、count、reduce、collectLatest 等

下面 挑两个 look look ;

Example 3 (葫芦娃合体的 reduce)

reduce 让结果之间再次运算

fun main() = runBlocking {
    var result3= (1..7).asFlow()
        .map{ it * 1 }
        .reduce{a,b -> a * b}
    println(result3)
  
  打印结果:28 // 从 1 加到 7
}

Example 4 (说打就打的 collectLatest)

collectLatest collectLatest块中的执行时间大于emit发射的间隔时间,那么将会被emit 打断

emit:(这货话太多了)不好意思我插一句!!

官方栗子:

flow {
     emit(1)
     delay(50)
     emit(2)
 }.collectLatest { value ->
     println("Collecting $value")
     delay(100) // Emulate work
     println("$value collected")
 }
结果打印:	"Collecting 1" 
		    "Collecting 2" 
		    "2 collected"

还有很多操作大家可以探索一下 欢迎评论区留言 !~~

小结:本次介绍了一些常用的 中间运算符终止操作 下一节 Flow(三)执行上下文原理

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:07:57  更:2021-09-05 11:09:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:58:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码