Flow collect

    Coroutines Flow 4편 - Flow의 수집이 일어나는 Context, Flow Buffering - buffer, conflate, collectLatest

    Flow의 수집이 일어나는 Context Flow의 수집은 언제나 Coroutine을 호출하는 Context상에서 일어난다. 예를 들어 만약 simple이라 불리는 Flow가 있다면, 다음의 코드의 simple Flow는 구체적인 구현과 상관없이 코드 작성자가 지정한 Context상에서 실행된다 : withContext(context) { simple().collect { value -> println(value) // run in the specified context } } Flow의 이러한 성질은 컨텍스트 보존(context preservation)이라 불린다. 따라서 기본적으로 flow { ... } 빌더 내부의 코드는 해당 Flow의 collector가 제공하는 Context 상에서 실행된다. ..

    Coroutines Flow 3편 - Flow 터미널 연산자, Flow는 순차적이다

    Flow 터미널 연산자 Flow의 터미널 연산자는 flow를 수집을 시작하는 일시정지 함수*1이다. collect 연산자는 가장 기본 연산자이지만, 사용을 더 쉽게 만드는 다른 터미널 연산자들도 있다. 다양한 Collection으로의 변환을 수행하는 toList 와 toSet 같은 연산자.*2 첫 값만 가져오기 위한 first 연산자와 하나의 값만 방출되는 것을 확인하는 single 연산자.*3 flow를 값으로 줄이는 reduce나 fold를 연산자. 예를 들어 : val sum = (1..5).asFlow() .map { it * it } // squares of numbers from 1 to 5 .reduce { a, b -> a + b } // sum them (terminal operator)..