我将使用RxJava
替换为Coroutines
和Flow
的当前实现。使用某些Flow
运算符时遇到了麻烦。
我正在尝试过滤Flow
中的项目列表,然后再提供要收集的项目列表。 (Flow<List<TaskWithCategory>>
)
以下是Rx2
上的示例:
repository.findAllTasksWithCategory()
.flatMap {
Flowable.fromIterable(it)
.filter { item -> item.task.completed }
.toList()
.toFlowable()
在上面的实现中,我提供了按TaskWithCategory
进行过滤的Task
过滤列表。
如何使用Flow
实现这一目标?
答案 0 :(得分:1)
鉴于使用的唯一运算符是filter
,因此内部的flowable是不必要的,从而使流的实现非常简单:
repository.findAllTasksWithCategoryFlow()
.map { it.filter { item -> item.task.completed } }
如果更涉及内部转换(请使用transform: suspend (X) -> TaskWithCategory
)
repository.findAllTasksWithCategoryFlow()
// Pick according to desired backpressure behavior
.flatMap(Latest/Concat/Merge) {
// Scope all transformations together
coroutineScope {
it.map { item ->
// Perform transform in parallel
async {
transform(item)
}
}.awaitAll() // Return when all async are finished.
}
}