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,执行最新的元素
1246

被折叠的 条评论
为什么被折叠?



