我在我的项目中使用MutableStateFlow。当我们初始化MutableStateFlow对象时,我们需要给予默认值。
val topics = MutableStateFlow<List<String>>(emptyList())
当我收集这个值时
[null, "Hello", "world"]
我想在adapter中传递这个列表。那么,有没有办法在传递adapter之前删除null对象,或者有没有更好的方法?
viewModel.topics.collect { topicsList ->
println(topicsList) // [null, "Hello", "world"]
adapter.submitList(topicsList)
}
5条答案
按热度按时间knpiaxh11#
如果不希望它有强制的初始值,可以使用MutableSharedFlow。如果给予它
replay = 1
、onBufferOverflow = BufferOverflow.DROP_OLDEST
和distinctUntilChanged()
,它基本上与没有强制value
的MutableStateFlow相同。如果onBufferOverflow
不是BufferOverflow.SUSPEND
,tryEmit
将始终成功,因此您可以使用tryEmit()
而不是value =
。628mspwn2#
如果你想忽略StateFlow的初始值,设置初始值
null
或任何你想要的值。然后你可以在流上使用filter
函数。例如,初始值为
null
输出量
2skhul333#
我想你需要的是这个:
fafcakar4#
由于它发出一个字符串列表,您可以尝试使用null初始化StateFlow,如下所示
在收集时,您可以检查发出的值是否为空
bwitn5fc5#
如果我们已经给出了一个通用的泛型类型的sealed类。
通用密封类
在这种情况下,我们可以这样设置初始值。
包模型是模型/Pojo类