= :initDate AND date > 我是这样使用它的: dao.cur-6ren">
gpt4 book ai didi

android - RXJava 2 Flowable`s mergeWith 不合并

转载 作者:搜寻专家 更新时间:2023-11-01 08:23:31 24 4
gpt4 key购买 nike

我在我房间的 dao 上有这个方法

@Query("SELECT * FROM Expense WHERE date >= :initDate AND date <= :endDate AND chargeableUuid = :chargeableUuid ORDER BY date")
fun currentMonth(initDate: Long, endDate: Long, chargeableUuid: String): Flowable<List<Expense>>

我是这样使用它的:

dao.currentMonth(firstDayOfMonth, lastDayOfMonth, account.uuid)
.mergeWith(dao.currentMonth(firstDayOfMonth, lastDayOfMonth, card.uuid))
.subscribe { Log.i("test", "size ${it.size}" }

如果我分别执行每个调用,每个调用都返回一个元素(不同的元素),但是当我一起执行它们时,日志输出只有一个元素在返回的列表中。

如何将两个 Flowable 的发射合并为一个?

最佳答案

当您使用 merge (或 mergeWith )运算符,如您在图中所见,您将拥有一个 Observable,它发出所有 Observable 发出的所有项目。 (或 Flowable 您正在合并)。

enter image description here

因此,实际上您的订阅者将收到两个列表。如果你只想要一个Flowable发出一个包含所有列表中所有项目的单个项目(列表),您可以使用 toList运算符(operator):

dao.currentMonth(firstDayOfMonth, lastDayOfMonth, account.uuid)
.mergeWith(dao.currentMonth(firstDayOfMonth, lastDayOfMonth, card.uuid))
.toList()

您将创建一个 Flowable发出列表列表,List<List< Expense>>这将包含您的两个列表。所以你可以map它在一个列表中:

dao.currentMonth(firstDayOfMonth, lastDayOfMonth, account.uuid)
.mergeWith(dao.currentMonth(firstDayOfMonth, lastDayOfMonth, card.uuid))
.toList()
.map(lists -> {
List<Expense> l = new ArrayList<>();
for (List<Expense> list : lists) {
l.addAll(list);
}
return l;
})

如果您现在订阅,您将获得一个列表,其中包含两个 Expense对象。

关于android - RXJava 2 Flowable`s mergeWith 不合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705908/

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