在 StateFlow 中操作集合的正确方法
Proper way to operate collections in StateFlow
我正在这样创建 MutableStateFlow:
val intSet = MutableStateFlow(HashSet<Int>())
稍后我想在此流程中更新集合:
intSet.value.add(0)
这似乎不起作用(集合更新,但未通知观察者)。
我发现它的工作方式:
val list = HashSet<Int>(intSet.value)
list.add(0)
intSet.value = list
但是它创建了集合的副本,所以它看起来不适合我。有没有更简单的方法来更新 StateFlow 中的集合?
MutableFlow
不检查集合内容的变化。只有当集合引用发生变化时,它才会发出变化。
使用不可变 Set
并使用 +=
运算符添加新元素。这基本上会创建新的 Set
并将触发更改。
val intSetFlow = MutableStateFlow(setOf<Int>())
intSetFlow.value += 0
我正在这样创建 MutableStateFlow:
val intSet = MutableStateFlow(HashSet<Int>())
稍后我想在此流程中更新集合:
intSet.value.add(0)
这似乎不起作用(集合更新,但未通知观察者)。 我发现它的工作方式:
val list = HashSet<Int>(intSet.value)
list.add(0)
intSet.value = list
但是它创建了集合的副本,所以它看起来不适合我。有没有更简单的方法来更新 StateFlow 中的集合?
MutableFlow
不检查集合内容的变化。只有当集合引用发生变化时,它才会发出变化。
使用不可变 Set
并使用 +=
运算符添加新元素。这基本上会创建新的 Set
并将触发更改。
val intSetFlow = MutableStateFlow(setOf<Int>())
intSetFlow.value += 0