将 Single<List<Maybe<Book>>> 转换为 Single<List<Book>>

Transform Single<List<Maybe<Book>>> to Single<List<Book>>

有人可以帮忙吗?

我有这些功能

fun getBooks(): Single<List<Book>> {
    return getCollections()
        .map {
            it.map(::collectonToBook)
        }
}

fun getCollections(): Single<List<Collection>> {
   return db.fetchCollections()
       .filter(::isBook)
}

fun collectonToBook(collection: Collection): Maybe<Book> {
    return collection.toBook()
}
            

问题是 getBooks returns Single<List<Maybe<Book>>> 当我需要 Single<List<Book>> 时。我可以在不调用 blockingGet 的情况下在流中执行此操作吗?

试试这个:

getCollections()                        // Single<List<Collection>>
.flattenAsFlowable { it }               // Flowable<Collection>
.concatMapMaybe { collectonToBook(it) } // Flowable<Book>
.toList()                               // Single<List<Book>>

换句话说,将内部的List展开到它的元素中,将Collection转换成Book,连接它们各自的Maybe源,最后收集Book再次进入List