过滤val变量而不更改其声明Kotlin
我有以下代码:过滤val变量而不更改其声明Kotlin,kotlin,Kotlin,我有以下代码: selectedMedias.filter { !File(it.path).exists() } info:Filter返回另一个通过给定回调过滤的对象 问题在于selectedMedias声明为val。我不想更改声明以生成代码 selectedMedias = selectedMedias.filter { !File(it.path).exists() } 如何过滤val变量而不更改其声明 我无法重新分配selectedMedias,因为selectedMedias是适
selectedMedias.filter { !File(it.path).exists() }
info:Filter返回另一个通过给定回调过滤的对象
问题在于selectedMedias
声明为val。我不想更改声明以生成代码
selectedMedias = selectedMedias.filter { !File(it.path).exists() }
如何过滤val
变量而不更改其声明
我无法重新分配selectedMedias,因为selectedMedias是适配器的ArrayList,这就是我无法重新分配它的原因如果我理解正确,您希望修改类型为
ArrayList
的val
属性
由于val
,该实例是不可变的,但您可以像往常一样修改内部值:
val selectedMedias = ArrayList<T>(/*init value*/)
selectedMedias.apply {
val newValues = this.filter { !File(it.path).exists() }
clear()
addAll(newValues)
}
val selectedMedias=ArrayList(/*init value*/)
selectedMedias.apply{
val newValues=this.filter{!文件(it.path).exists()}
清除()
addAll(新值)
}
您可以使用removeIf()适当地筛选列表(假设它是可变列表
,例如数组列表
)
:
请注意,谓词是反向的:它应该返回true
以删除该项,返回false
以保留该项。(不幸的是,似乎没有相应的keepIf()
,因为这与filter()
的工作方式更为相似。但如果需要,您可以轻松编写一个!)
(*如果列表是不可变的,并且不是
var
,那么当然没有办法更改它。)是否selectedMedias
是某个类的属性?它是适配器的ArrayList,这就是我无法重新分配它的原因,您确定必须更改selectedMedias
内容吗?也许一个自定义的get
方法val-selectedMedias-get()=field.filter{…}
或者一个支持属性val-filteredSelectedMedias-get()=selectedMedias.filter{…}
可以帮助你解决这个问题。是的,我必须改变它,你的两种解决方案似乎都是可行的。但是,这种过滤操作很少发生,因此设置get()对于访问selectedMedias的代码的其他部分来说是一种过分的杀伤力
val selectedMedias = mutableListOf(File(a), File(b))
selectedMedias.removeIf{ File(it.path).exists() }