9

我正在使用RxJavatoCoroutines和替换我当前的实现Flow。我在使用某些Flow运算符时遇到了一些麻烦。

我正在尝试Flow在提供要收集的内容之前过滤 a 中的项目列表。( Flow<List<TaskWithCategory>>)

这是关于Rx2

        repository.findAllTasksWithCategory()
            .flatMap {
                Flowable.fromIterable(it)
                    .filter { item -> item.task.completed }
                    .toList()
                    .toFlowable()

在上面的实现中,我提供了一个已经完成的TaskWithCategory过滤列表。Task

我怎样才能做到这一点Flow

4

1 回答 1

13

鉴于唯一使用的运算符是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.
        }
    }
于 2019-12-22T16:25:53.500 回答