如何更改 ObservableList 上的列表类型并对其进行过滤?

How change List type on ObservableList and filter it?

我更改列表:

var viewModels: List<AuthorizationViewModel> = emptyList()

var viewModels: ObservableList<AuthorizationViewModel> = ObservableArrayList<AuthorizationViewModel>()

在我过滤的地方:

viewModels = viewModels.filter { !it.shouldBeDestroyed }

我得到下一个错误:

 required: ObservableList<AuthorizationViewModel> 
 found: List<AuthorizationViewModel>

因为 .filter() return 列表,但是 我如何过滤 我的 ObservableList?

我写下一个扩展:

fun <T> List<T>.toObservableList(): ObservableList<T> {
    return ObservableArrayList<T>().also { it.addAll(this) }
}

并使用:

viewModels = viewModels.filter { !it.shouldBeDestroyed }.toObservableList()

这解决了我的问题。

但是如果你需要添加回调,你可以这样做(实例问题):

val filteredList = viewModels.filter { !it.shouldBeDestroyed }
viewModels.replaceWith(filteredList)

fun ObservableList<AuthorizationViewModel>.replaceWith(list: List<AuthorizationViewModel>) {
    this.clear()
    this.addAll(list)
}

您可以更直接地执行此操作:

viewModels.removeIf { it.shouldBeDestroyed }