최대 1 분 소요

coroutine13_image1.jpg

zip으로 묶기

zip은 양쪽의 데이터를 한꺼번에 묶어 새로운 데이터를 만들어 낸다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun main() = runBlocking<Unit> { 
    val nums = (1..3).asFlow()
    val strs = flowOf("일", "이", "삼") 
    nums.zip(strs) { a, b -> "${a}은(는) $b" }
        .collect { println(it) }
}
1() 
2() 
3() 

combine으로 묶기

combine은 양쪽의 데이터를 같은 시점에 묶지 않고 한 쪽이 갱신되면 새로 묶어 데이터를 만든다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun main() = runBlocking<Unit> { 
    val nums = (1..3).asFlow().onEach { delay(100L) }
    val strs = flowOf("일", "이", "삼").onEach { delay(200L) }
    nums.combine(strs) { a, b -> "${a}은(는) $b" }
        .collect { println(it) }
}
2() 
3() 
3() 
3() 

데이터가 짝을 이룰 필요없이 최신의 데이터를 이용해 가공해야 하는 경우에 사용할 수 있다.