gpt4 book ai didi

android - 在房间中将 Flowable> 更改为 Flowable>

转载 作者:太空狗 更新时间:2023-10-29 14:42:22 26 4
gpt4 key购买 nike

我如何从 room 中读取可流动的值列表并将其转换为另一个对象,该对象是 room 中更多值的组合

database.leadsDao().getLeads(leadState.name)
.flatMap {
val len = it.size.toLong()
Flowable.fromIterable(it)
.flatMap {
Flowable.zip(
database.orderDao().getById(it.orderId),
database.orderMedicineDao().getByOrderId(it.orderId),
database.patientDao().getById(it.patientId),
Function3<Order, List<OrderMedicine>, Patient, LeadDetail>
{ order, orderMedicines, patient -> LeadDetail.from(it, patient, order, orderMedicines) })
}
.take(len)
.toList()
.toFlowable()
}

上面的代码有效,但我不喜欢 take(len) 部分。没有它,流永远不会调用订阅者的 onNext 。流一直在等待更多的项目,这不应该发生,因为 Flowable.fromIterable 给出有限数量的项目然后结束。即,下面的代码不起作用

database.leadsDao().getLeads(leadState.name)
.flatMap {
Flowable.fromIterable(it)
.flatMap {
Flowable.zip(
database.orderDao().getById(it.orderId),
database.orderMedicineDao().getByOrderId(it.orderId),
database.patientDao().getById(it.patientId),
Function3<Order, List<OrderMedicine>, Patient, LeadDetail>
{ order, orderMedicines, patient -> LeadDetail.from(it, patient, order, orderMedicines) })
}
.toList()
.toFlowable()
}

最佳答案

Flowable.fromIterable gives finite number or items and then ends.

但是 flatmap 中的 Flowable.zip 不会结束,因为 Room 的 DAO 对象发出当前值和所有 future 的更新,所以 database. *() 压缩在一起的调用不是有限的。如果您将 .first() 调用添加到内部 Flowable.zip,第二个版本应该也能正常工作。

关于android - 在房间中将 Flowable<List<Obj1>> 更改为 Flowable<List<Obj2>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com