在android flow + room,如何监控一个List of Flow
In android flow + room, How to monitor a List of Flow
你好,
----DAO---
@Transaction
@Query("select * from expenses where date= :date")
suspend fun getExpenseWithTagByDate(date: LocalDate): Flow<List<ExpenseWithTag>>
我有如下的 Dao 代码。 但是如果我需要查询两天或更长时间,我该怎么办?
fun getEnpenseWithTagByMonth(dates: List<LocalDate>) =
flow {
val lists = arrayListOf<Flow<List<ExpenseWithTag>>>()
dates.forEach {
val expenses = expenseDao.getExpenseWithTagByDate(it)
lists.add(expenses)
}
emit(lists)
}.flowOn(Dispatchers.IO)
然后
getEnpenseWithTagByMonth(dates).asLiveData()
终于搞定类型了,太惨了:
ArrayList<Flow<List<ExpenseWithTag>>>>>
如何写出简洁高效的代码
回答你的问题
if I need query two days or more, How can I do it?
您可以使用 in
查询,然后将它们分组。
@Query("select * from expenses where date IN (:dates)")
suspend fun getExpenseWithTagByDate(dates: List<LocalDate>): Flow<List<ExpenseWithTag>>
fun getEnpenseWithTagByMonth(dates: List<LocalDate>): Flow<List<List<ExpenseWithTag>>> {
return expenseDao.getExpenseWithTagByDate(dates).map { expenses ->
expenses.groupBy{ expense -> expense.date }.values
}
}
你好,
----DAO---
@Transaction
@Query("select * from expenses where date= :date")
suspend fun getExpenseWithTagByDate(date: LocalDate): Flow<List<ExpenseWithTag>>
我有如下的 Dao 代码。 但是如果我需要查询两天或更长时间,我该怎么办?
fun getEnpenseWithTagByMonth(dates: List<LocalDate>) =
flow {
val lists = arrayListOf<Flow<List<ExpenseWithTag>>>()
dates.forEach {
val expenses = expenseDao.getExpenseWithTagByDate(it)
lists.add(expenses)
}
emit(lists)
}.flowOn(Dispatchers.IO)
然后
getEnpenseWithTagByMonth(dates).asLiveData()
终于搞定类型了,太惨了:
ArrayList<Flow<List<ExpenseWithTag>>>>>
如何写出简洁高效的代码
回答你的问题
if I need query two days or more, How can I do it?
您可以使用 in
查询,然后将它们分组。
@Query("select * from expenses where date IN (:dates)")
suspend fun getExpenseWithTagByDate(dates: List<LocalDate>): Flow<List<ExpenseWithTag>>
fun getEnpenseWithTagByMonth(dates: List<LocalDate>): Flow<List<List<ExpenseWithTag>>> {
return expenseDao.getExpenseWithTagByDate(dates).map { expenses ->
expenses.groupBy{ expense -> expense.date }.values
}
}