记录一下flow的学习

flow{emit(1)}.collect{**}//flow和collect运行在同一协程,flow执行一个emit,要等collect执行完才能执行第二个emit
buffer:flow{emit(1)}.buffer().collect{**}缓存emit数据,collect执行完一个马上又从缓存中取下一个执行(不会丢掉数据)

collectLatest:只接收处理最新的数据。如果有新数据到来了而前一个数据还没有处理完,则会将前一个数据剩余的处理逻辑全部取消
map:遍历流中所有元素,最后一句作为元素emit
filter:遍历流中所有元素,最后一句Boolean判断是否需要去掉此元素 

onEach:和filter直接返回false一样

flow.reduce { acc, value -> acc + value }
reduce:acc是累积值的意思,value则是当前值,不需要collet
fold:和reduce类似,只是需要一个初始值

debounce:会等待一定时间,在源流停止发射数据后的指定时间内没有新的数据发射时,发送最新的数据(delay+cancel)
sample:隔一定时间间隔取一个最新元素

conflate:和collectLatest(新的emit会让collect未执行完的代码全部取消)类似,但每一个collect必然会完整执行,执行完了再取最新的emit元素,中间的元素会被抛掉

merge:把数据类型相同的多路流归并为一路,不做任何操作
zip:会按顺序对齐元素:流A的1对流B的1,流A的2对流B的2,对不齐的丢掉
combine:要集齐每路流的最新元素,每次来新元素,都会取另一个流现在的元素

flatmap(和combine区别是只能两个流,并且两个可以相互依赖)
FlowA.flatMap..(FlowB)(两个流展平)
flatMapConcat(类似双重for循环,串行执行),FlowA发送一个元素,FlowB用这个元素执行完再执行FlowA的第二个元素
flatMapMerge(并行执行),FlowA发送一个元素,FlowB就执行一次,FlowA再发送一个元素,FlowB并不会等待完成,马上又执行一次
flatMapLatest,FlowA发送一个元素,FlowB就执行一次,FlowA再发送一个元素,如果FlowB还未执行完成,则会抛掉未完成A,执行最新的元素
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值