Skip to content

Instantly share code, notes, and snippets.

View sproshchaev's full-sized avatar
🙂

Sergey Proshchaev sproshchaev

🙂
View GitHub Profile
@sproshchaev
sproshchaev / gist:b68d2b0ca7ace85299bce10107511cbb
Created December 24, 2024 09:53
Kotlin: пример StateFlow
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
// Создаем MutableStateFlow с начальным состоянием "state1"
val mshState = MutableStateFlow("state1")
// Подписчик на изменения состояния
val job = launch {
mshState.collect { state ->
@sproshchaev
sproshchaev / gist:56ca5fc3b147dfb3ddf199c57764a70f
Created December 24, 2024 09:47
Kotlin: пример SharedFlow
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
// Создаем SharedFlow
val shFlow = MutableSharedFlow<String>()
// Первый подписчик
val j1 = launch {
shFlow.collect { println("XX received: $it") }
@sproshchaev
sproshchaev / gist:fd70cd5b2cc61c39f6a752e92e0f3ebe
Created December 24, 2024 09:32
Kotlin: примеры терминальных операторов для Flow
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
// Создание простого потока
val flow = flow {
emit(1)
emit(2)
emit(3)
}
@sproshchaev
sproshchaev / gist:2d74f1f7780894a573fd07eb5fe495f6
Created December 24, 2024 09:22
Kotlin: примеры операторов для Flow
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.*
import org.slf4j.LoggerFactory
fun main() = runBlocking {
val log = LoggerFactory.getLogger("FlowExample")
// Исходный поток
val flow = flow {
@sproshchaev
sproshchaev / gist:ec94351db71e9e4a7904e20ffbdf6c48
Created December 24, 2024 09:15
Kotlin: примеры билдеров для Flow
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.channels.trySendBlocking
import kotlinx.coroutines.flow.*
import java.util.Timer
import kotlin.concurrent.scheduleAtFixedRate
fun main(): Unit = runBlocking {
// 1. Пустой поток
println("Empty Flow:")
@sproshchaev
sproshchaev / gist:e60616d58b67ed100045c254bf14b436
Created December 24, 2024 09:05
Kotlin: пример Flow is cold — каждый вызов терминального оператора запускает поток заново
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main(): Unit = runBlocking { // Запускаем основную корутину, которая блокирует главный поток.
val flow = flow<Int> { // Создаем поток данных (Flow) с типом элементов Int.
println("Started") // Выводим сообщение "Started" при каждом создании потока.
emit(1) // Эмитируем (выводим) значение 1 в поток.
}
// Запускаем первую корутину, которая будет собирать данные из потока.
@sproshchaev
sproshchaev / gist:b339b11005842037b2cd83182399ab1c
Created December 24, 2024 08:47
Kotlin: пример смены контекста
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
suspend fun main() { // Главная функция, которая является корутиной и может выполнять асинхронные операции
withContext(Dispatchers.Default) { // Смена контекста на Default dispatcher для выполнения дальнейших операций
val result = flow { // Создаем Flow, который будет эмитировать элементы
println("Создание числа в потоке: ${Thread.currentThread().name}") // Выводим имя текущего потока
emit(10) // Эмиттируем число 10 в поток
}
.map { number -> // Применяем операцию map для каждого значения потока
@sproshchaev
sproshchaev / gist:0ba3a39dbf1ce79c693970713d12a16b
Created December 24, 2024 07:37
Kotlin: этапы при работе с flow-потоками
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
// (1) Билдер: создаем flow, который эмиттирует значения
flow<Int> {
emit(1)
emit(2)
emit(3)
emit(4)
@sproshchaev
sproshchaev / gist:0d96197ef8cc5397f6bf8920e69f00b0
Created December 24, 2024 07:25
Kotlin: пример создания потока данных Flow<T>
import kotlinx.coroutines.runBlocking
// Интерфейс Flow, представляющий поток данных
fun interface Flow<out T> {
// Метод для сбора данных из потока с использованием коллекторов
suspend fun collect(collector: FlowCollector<T>)
}
// Интерфейс FlowCollector, который собирает данные из потока
fun interface FlowCollector<in T> {
@sproshchaev
sproshchaev / gist:80afa035af874e42245ee218f3655308
Last active December 24, 2024 10:28
Kotlin: варианты создания Создание Sequence<T>
import kotlin.random.Random
fun main() {
// (1) Пустая последовательность
// Эта последовательность не содержит элементов и сразу завершает итерацию
val emptySeq = emptySequence<Int>()
println("Empty sequence: ${emptySeq.toList()}") // Печатает пустую последовательность
// (2) Из набора элементов
// Создаём последовательность из нескольких заранее заданных элементов