Android 공부/Coroutine

[XX캠퍼스] 12.Kotlin Coroutines & Flow ( Flow 결합하기 )

Machine_웅 2022. 7. 26. 20:45
728x90
반응형

zip으로 묶기

combine으로 묶기


 

 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) }
}

실행결과 
1은(는) 일
2은(는) 일
3은(는) 일
3은(는) 이
3은(는) 삼

예제에서는 적합한 코드는 아닙니다.

하지만 데이터가 짝을 이룰 필요없이

최신의 데이터를 이용해 가공해야 하는 경우에 사용할 수 있습니다.

 

* 용도에 따라 완전히 을 맞춰야 하는 경우 zip , 최신의 데이터를 맞춰야한다 combine

 

 

728x90
반응형