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

Posted

技术标签:

【中文标题】将 Single<List<Maybe<Book>>> 转换为 Single<List<Book>>【英文标题】:Transform Single<List<Maybe<Book>>> to Single<List<Book>> 【发布时间】:2021-03-20 20:28:12 【问题描述】:

有人可以帮忙吗?

我有这些功能

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()

            

问题是当我需要 Single&lt;List&lt;Book&gt;&gt; 时 getBooks 返回 Single&lt;List&lt;Maybe&lt;Book&gt;&gt;&gt;。我可以在流中做到这一点而不调用blockingGet吗?

【问题讨论】:

【参考方案1】:

试试这个:

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

换句话说,将内部List 解包为其元素,将Collection 转换为Book,连接它们各自的Maybe 源,然后最后将Books 再次收集为List

【讨论】:

哇!它就像一个奇迹,非常感谢。并且为了快速响应!干杯!

以上是关于将 Single<List<Maybe<Book>>> 转换为 Single<List<Book>>的主要内容,如果未能解决你的问题,请参考以下文章

房间中 Maybe<List<T>> 的行为不正确?

为什么 RxJava 有 Single / Maybe 等单发数据类型,而 Flow 没有?

RXJAVA-Maybe

RXJAVA-Maybe

将类型分配给作为 Maybe 类型的嵌套类型的属性

安卓rxjava内存泄漏