gpt4 book ai didi

kotlin - Flow> 而不是使用 Flow

转载 作者:行者123 更新时间:2023-12-02 13:16:41 29 4
gpt4 key购买 nike

我注意到很多人和例子都使用 Flows 作为 List<> 的包装器,例如像这样:

@Query("SELECT * from some_model ORDER BY some_field")
fun getData(): Flow<List<some_model>>
据我所知,Flow 就像一种“异步序列”,所以我真的没有理解“Flow >”的含义。
为什么我们不能直接使用 Flow< T > 这对我来说似乎很直观,我问这个问题是因为我在代码片段中看到了多次重复并且无法理解其背后的目的?

最佳答案

当我开始使用 Flow 时,我问过自己同样的问题。 .
您可能认为使用 Flow with Room 将首先从查询中获取部分数据,使从数据库中获取的数据通过流可用。这将有效地使用像 Flow<T> 这样的东西.然而,这不是这里的想法,这更多的是你可以通过 Paging 获得的东西。 .
相反,当您调用 getData()你会得到一个 Flow<List<T>>每次查询结果发生变化时都会发出一个全新的列表,以及一个初始值。 SELECT语句总是生成带有 Room 的列表,而不是单个值。因此,假设您在一个地方收集流量:

dao.getData().collect { list ->
Log.d(TAG, list.joinToString())
}
然后您更改数据库:
dao.insert(...)
dao.insert(...)
将写入 3 条日志消息,一条用于初始值,两条用于后续更改。起初这可能看起来非常低效(这就是为什么我一开始并没有真正理解它的原因),但实际上在大多数设备上性能影响可以忽略不计,即使有数千行也是如此。当与 ListAdapter 结合使用时,它允许非常干净地实现列表。和 DiffUtil。
我希望这能回答你的问题。

关于kotlin - Flow<List<T>> 而不是使用 Flow<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62983215/

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