Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 流量<;列表<;T>&燃气轮机;而不是使用Flow<;T>;?_Kotlin_Reactive Streams_Kotlin Flow - Fatal编程技术网

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结合使用时,它允许非常干净的列表实现


我希望这能回答你的问题。

解释得很清楚!!这才是我真正想要的。非常感谢:)