Ответ
В Kotlin есть несколько асинхронных коллекций для работы с потоками данных:
- Flow - cold stream, который можно собирать с помощью операторов как
map,filter:
flow {
emit(1)
emit(2)
}.collect { value -> println(value) }
- Channel - hot stream для коммуникации между корутинами:
val channel = Channel<Int>()
launch { channel.send(1) }
launch { println(channel.receive()) }
- StateFlow - observable state holder, похож на LiveData:
val state = MutableStateFlow(0)
state.collect { println(it) }
state.value = 1
- SharedFlow - multicast flow для нескольких подписчиков:
val sharedFlow = MutableSharedFlow<Int>()
sharedFlow.emit(1)
Все они работают в контексте корутин и поддерживают отмену. Flow - ленивый, Channel/StateFlow/SharedFlow - горячие.