RXJava 2 Flowable`s mergeWith 不合并
RXJava 2 Flowable`s mergeWith not merging
我的 Room`s 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}" }
如果我分别执行每个调用,每个 return 一个元素(不同的元素),但是当我一起执行它们时,日志输出只有一个元素在 returned 列表中。
如何将两个 Flowable 的发射合并为一个?
当您使用图中所示的 merge
(或 mergeWith
)运算符时,您将拥有一个 Observable,它会发出从所有 Observable
发出的所有项目(或者 Flowable
你正在合并)。
因此,实际上您的订阅者将收到两个列表。如果你只想要一个 Flowable
发出一个包含所有列表中所有项目的单个项目(列表),你可以使用 toList
运算符:
正在做
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
对象的列表。
我的 Room`s 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}" }
如果我分别执行每个调用,每个 return 一个元素(不同的元素),但是当我一起执行它们时,日志输出只有一个元素在 returned 列表中。
如何将两个 Flowable 的发射合并为一个?
当您使用图中所示的 merge
(或 mergeWith
)运算符时,您将拥有一个 Observable,它会发出从所有 Observable
发出的所有项目(或者 Flowable
你正在合并)。
因此,实际上您的订阅者将收到两个列表。如果你只想要一个 Flowable
发出一个包含所有列表中所有项目的单个项目(列表),你可以使用 toList
运算符:
正在做
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
对象的列表。