kotlin之冷流转热流

本文探讨了Kotlin中如何将冷流转换为热流,重点介绍了shareIn和stateIn方法。shareIn方法用于将流转化为SharedFlow,而stateIn则用于转化为StateFlow。它们的参数包括scope、started(启动策略,如Eagerly、WhileSubscribed等)和replay(缓冲区大小)。通过源码分析,解释了不同启动策略对collect操作的影响,同时提到了initialValue用于stateIn的初始值设定。实验结果显示了使用SharingStarted.Eagerly和SharingStarted.WhileSubscribed时的不同行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stateflow和sharedflow以及channel都属于热流,但是如何将一个cold flow转成hotflow? kotlin提供了一个shareIn和stateIn的方法,看一下方法的定义:

public fun <T> Flow<T>.stateIn(
    scope: CoroutineScope,
    started: SharingStarted,
    initialValue: T
): StateFlow<T>
public fun <T> Flow<T>.shareIn(
    scope: CoroutineScope,
    started: SharingStarted,
    replay: Int = 0
): SharedFlow<T> 

shareIn方法将流转换为SharedFlow

stateIn方法将流转换为StateFLow

参数说明:

scope:flow需要在给定的conrutinue里面进行

started:开始流的方式,这里有三种:

​ 1.SharingStarted.Eagerly: 无论当前有没有订阅者,流都会开始,订阅者只能接收到replay个缓冲区的值

​ 2.SharingStarted.Lazily:当有第一个订阅者时,流才会开始,后面的订阅者只能接收到replay个缓冲区的值,当没有订阅者时流还是活跃的

​ 3.SharingStarted.WhileSubscribed

定义如下:

/*
Sharing is started when the fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值