Какие знаешь асинхронные коллекции

«Какие знаешь асинхронные коллекции» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin есть несколько асинхронных коллекций для работы с потоками данных:

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

Все они работают в контексте корутин и поддерживают отмену. Flow - ленивый, Channel/StateFlow/SharedFlow - горячие.