Frontend/Android
Flow usage pattern
Roiei
2025. 6. 19. 08:57
반응형
var items: Flow<List<Item>> = ...
items.map { list ->
list.filter { it.type == REGULAR }.sortedWith(
compareBy {
if (type.sortOrder == SortOrder.NAME) it.name else it.value
},
)
}
Flow가 List
Flow의 map 연산자는 항상 Flow를 반환
그래서 결과는 다시
Flow<List<Item>>임
#
Flow의 collect는 코루틴 내에서 실행되어야 함
그래서 다음과 같이 구현하기도 함
// 1. null이 아닌 경우 collect
flow?.let {
collectStations(it) { list ->
...
}
}
{ ... } 부분이 tailing lambda로 callback 매개변수에 전달됨
// 2. collect는 코루틴 내에서 수행
collectStations(flow: Flow..., callback: (List<MediaItem>) -> Unit) {
aJob?.cancel()
aJob = viewModelScope.launch(Dispatchers.IO) {
flow.collectLatest(callback)
}
}
flow에서 collect 시 마다 수신 받은 데이터에 대해 callback을 호출
이때 collectLatest에 callback을 넘겼으나, 다음과 같이 trailing lambda로 넘길수도 있음
collectLatest { it ->
...
}
반응형