funmain() {
runBlocking {
println("Messaging prime number")
sendPrimes().collect {
println("Received prime number $it")
}
println("Finished receiving numbers")
/* Messaging prime number Received prime number 2 Received prime number 3 Received prime number 5 Received prime number 7 Received prime number 11 Received prime number 13 Received prime number 17 Received prime number 19 Received prime number 23 Received prime number 29 Finished receiving numbers Process finished with exit code 0*/
}
}
funsendPrimes(): Flow<Int> = flow {
val primesList =listOf(2, 3, 5, 7, 11, 13, 17, 19, 23, 29)
primesList.forEach {
delay(it +100L)
emit(it)
}
}
Creating Flow
importkotlinx.coroutines.flow.asFlowimportkotlinx.coroutines.flow.collectimportkotlinx.coroutines.flow.flowimportkotlinx.coroutines.flow.flowOfimportkotlinx.coroutines.runBlockingfunmain() {
runBlocking {
sendNumbers().collect {
println("Received $it")
}
/* Received 1 Received 2 Received 3 Received 4 Received 5 Received 6 Received 7 Received 8 Received 9 Received 10*/
sendNumbersAsFlow().collect {
println("Received $it")
/* Received 1 Received 2 Received 3*/
}
sendNumbersFlowOf().collect {
println("Received $it")
/* Received One Received Two Received Three Process finished with exit code 0*/
}
}
}
funsendNumbers()
= flow {
for (i in1..10)
emit(i)
}
funsendNumbersAsFlow() =listOf(1, 2, 3).asFlow()
funsendNumbersFlowOf() = flowOf("One", "Two", "Three")
funmain() {
runBlocking {
val time = measureTimeMillis {
generate()
.collect {
delay(300L)
println(it)
}
}
println("Collected in $time time ms")
/* 1 2 3 Collected in 1258 time ms*//* 1 2 3 Collected in 1127 ms*/val bufferTime = measureTimeMillis {
generate()
.buffer()
.collect {
delay(300L)
println(it)
}
}
println("Collected in $bufferTime bufferTime ms")
/* 1 2 3 Collected in 1127 ms*/
}
}
fungenerate() = flow {
for (i in1..3) {
delay(100L)
emit(i)
}
}
zip
funmain() {
runBlocking {
zip()
/* One in French is Un Two in French is Desx Three in French is Troix Process finished with exit code 0*/
}
}
suspendfunzip() {
val english = flowOf("One", "Two", "Three")
val french = flowOf("Un", "Desx", "Troix")
english.zip(french) { a, b ->"$a in French is $b"}
.collect {
println(it)
}
}
combine
funmain() {
runBlocking {
combine()
/* 1 -> One 2 -> Two 3 -> Three 4 -> Four 5 -> Five Process finished with exit code 0*/
}
}
suspendfuncombine() {
val numbers = (1..5).asFlow().onEach { delay(300L) }
val values = flowOf("One", "Two", "Three", "Four", "Five").onEach { delay(300L) }
numbers.combine(values) { a, b ->"$a -> $b"
}.collect { println(it)}
}