fun main() {
runBlocking {
withTimeoutOrNull(2500){
loadData1().collect {
println(it)
}
}
}
}
我们运行main方法,则只有1 2 两个数字进行了打印
1
2
Process finished with exit code 0
Flow的操作符
类似集合的函数是Api,Flow中也有许多操作符,这里我们简单举几个例子:
map
使用map我们可以将最终结果映射为其他类型,代码如下所示:
fun changeData(value: Int): String {
return “打印的结果是:${value}”
}
fun main() {
runBlocking {
loadData1().map {
changeData(it)
}.collect{
println(it)
}
}
}
我们通过map操作符将结果映射为字符串的形式,运行main 打印结果如下所示:
打印的结果是:1
打印的结果是:2
打印的结果是:3
Process finished with exit code 0
filter操作符
通过filter 我们可以对结果集添加过滤条件,如下所示,我们仅打印出大于1的值
runBlocking {
loadData1().filter {
it > 1
}.collect {
println(it)
}
}
故 打印结果如下所示:
2
3
Process finished with exit code 0
所有的操作符都是可以一起使用的,并非只能单独使用。
我们上面调用的collect是末端操作符,在Flow中除了collect之外 还有toList、reduce、fold等操作符。
toList操作符我们可以很明显的知道意为转换为list集合,而reduce 和 fold 则可将最终的值转为单一的值。
fun main() {
runBlocking {
var data = loadData1().reduce { a, b ->
<