Kotlin 流量<;列表<;T>&燃气轮机;而不是使用Flow<;T>;?
我注意到,许多人和示例使用流作为列表的包装,例如:Kotlin 流量<;列表<;T>&燃气轮机;而不是使用Flow<;T>;?,kotlin,reactive-streams,kotlin-flow,Kotlin,Reactive Streams,Kotlin Flow,我注意到,许多人和示例使用流作为列表的包装,例如: @Query("SELECT * from some_model ORDER BY some_field") fun getData(): Flow<List<some_model>> @Query(“按某个字段从某个模型订单中选择*) fun getData():流 正如我所知,流类似于“异步序列”,所以我真的没有理解“流>”的含义 为什么我们不能直接使用Flow,这对我来说似乎很直观,我问这个
@Query("SELECT * from some_model ORDER BY some_field")
fun getData(): Flow<List<some_model>>
@Query(“按某个字段从某个模型订单中选择*)
fun getData():流
正如我所知,流类似于“异步序列”,所以我真的没有理解“流>”的含义
为什么我们不能直接使用Flow
Flow
时问自己的问题相同
您可能认为将Flow
与Room一起使用会在一开始部分地从查询中获取数据,从而使数据在从数据库获取时通过流可用。这将有效地使用类似于Flow
的东西。然而,这不是这里的想法,这是你会得到更多的东西
相反,当您调用getData()
时,您会得到一个流
,它将在每次查询结果更改时发出一个全新的列表以及一个初始值<代码>选择语句始终生成带有房间的列表,而不是单个值。假设你在一个地方收集流量:
dao.getData().collect { list ->
Log.d(TAG, list.joinToString())
}
然后您将更改数据库:
dao.insert(...)
dao.insert(...)
将写入3条日志消息,一条用于初始值,两条用于后续更改。这在一开始可能看起来效率很低(这就是为什么我一开始并没有真正理解它),但实际上对大多数设备的性能影响可以忽略不计,即使有数千行。当与和DiffUtil结合使用时,它允许非常干净的列表实现
我希望这能回答你的问题。解释得很清楚!!这才是我真正想要的。非常感谢:)