Как сконвертировать Channel в Flow

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

Ответ

В Kotlin можно легко конвертировать Channel в Flow с помощью расширения consumeAsFlow() или receiveAsFlow().

Разница:

  • receiveAsFlow() – безопасно преобразует канал в Flow, но не закрывает канал после завершения.
  • consumeAsFlow() – автоматически закрывает канал после завершения Flow.

Пример:

val channel = Channel<Int>()
val flow: Flow<Int> = channel.receiveAsFlow() // или channel.consumeAsFlow()

// Отправка данных в канал
launch {
    channel.send(1)
    channel.send(2)
    channel.close()
}

// Получение данных из Flow
flow.collect { value ->
    println(value) // 1, 2
}

Когда использовать:

  • receiveAsFlow() – если канал используется несколькими подписчиками.
  • consumeAsFlow() – если канал нужен только одному подписчику.