1. Flow 생성
fun main() = runBlocking {
val flow1 = (0..10).asFlow()
println("flow1")
flow1.collect {
delay(400)
print("$it ")
}
println("\\nflow2")
flowOf(1, 2, 3, 4, 5).collect {
delay(400)
print("$it ")
}
val flow3 = flow {
(0..5).forEach {
emit(it)
}
}
println("\\nflow3")
flow3.collect {
delay(400)
print("$it ")
}
}
flow1
0 1 2 3 4 5 6 7 8 9 10
flow2
1 2 3 4 5
flow3
0 1 2 3 4 5
Flow
를 만드는 방법은 여러가지가 있습니다.
- 첫 번째 방법은
list
, arrayList
, set
등을 Flow
로 변환하는 asFlow()
를 사용하였습니다.
- 두 번째 방법은
flowOf()
을 사용하여 원하는 타입의 내용을 넣어서 사용하였습니다.
- 두 방식은 별도의
emit()
은 필요 없이 순차적으로 값이 들어오게 됩니다.
- 세 번째 방식은
flow{}
로 Flow
를 생성 후 emit
을 호출하여 데이터를 내보내고 collect
를 통해 데이터를 수집하게 됩니다.
- 세 번째 방식에서는
*repeat*
을 통해 5회 반복해서 emit
을 하게 되고 emit
을 할 때마다 collect
는 print()
를 하게 됩니다.
1-1. map
fun main() = runBlocking {
(1..10).asFlow()
.map {
it * it
}
.collect {
print("$it ")
}
}
1 4 9 16 25 36 49 64 81 100
collect
이전에 map
을 이용하여 데이터를 가공하여 데이터를 수집할 수 있습니다.
1-2. filter
fun main() = runBlocking {
(1..10).asFlow()
.filter {
it % 2 == 0
}
.collect {
print("$it ")
}
}