在 Kotlin 中更改可变列表中的值
Posted
技术标签:
【中文标题】在 Kotlin 中更改可变列表中的值【英文标题】:Change a value in mutable list in Kotlin 【发布时间】:2019-07-14 19:06:44 【问题描述】:我得到了这个可变列表:
[Videos(id=4, yt_id=yRPUkDjwr1A, title=test4, likes=0, kat=pranks, ilike=false), Videos(id=3, yt_id=WkyUU9ZDUto, title=test3, likes=0, kat=pranks, ilike=false), Videos(id=2, yt_id=B_X9OQqtduE, title=test2, likes=0, kat=animals, ilike=false), Videos(id=1, yt_id=ywaKlGNiv80, title=test1, likes=0, kat=animals, ilike=false)]
如何将ilike
更改为true
,其中id
是2
这是我尝试过的:
for (i in 0 until vids!!.size)
Log.d("lets", vids!!.get(i).title)
if(vids!!.get(i).id == 2)
vids!!.get(i).ilike = true
【问题讨论】:
你得到什么错误? 【参考方案1】:您可以使用find
函数查找id = 2 的元素并更改其属性:
vids?.find it.id == 2 ?.iLike = true
注意:最好使用question mark if the property is nullable,但您不确定它是否为空。
【讨论】:
此处与其他答案相同,我得到“无法重新分配 Val”:/ 似乎iLike
属性标记为val
。你需要在你的模型中设置var
:Video(..., var iLike, ...)
你是对的 :D 我需要在定义了所有视频值的类中更改它,谢谢!【参考方案2】:
如果您预计少数项目(可能是 1 个或 2 个?)会受到影响,
您可以filter
列表然后更改过滤项目的iLike
:
vids!!.filter it.id == 2 .forEach it.iLike = true
【讨论】:
【参考方案3】:试试这个,我假设你的 Videos
结构是一个类似这样定义的数据类。 data class Videos(val id: Int, val yt_id: String, val title: String, val likes: Int, val kat: String, val ilike: Boolean)
list.forEachIndexed index, video ->
video.takeIf it.id == 2?.let
list[index] = it.copy(ilike = true)
【讨论】:
我在 video.takeIf it.id == 2 ?.ilike 上收到错误“无法重新分配 Val” 所以我的假设不成立。您不能更改Videos
类型中的值。您必须完全替换类型。我正在更新上面的示例
是的,谢尔盖更快【参考方案4】:
我必须更改几个属性,并且需要保存更改后的对象。因此,以下方法对我来说效果更好:
//First, find the position of the video in the list
val videoPosition= list.indexOfFirst
it.id == 2
//Now get your video by position and make changes
val updatedVideo = list[videoPosition].apply
//Make all changes you need here
ilike = true
//...
//Finally, replace updated video into your list.
list[videoPosition] = updatedVideo
【讨论】:
【参考方案5】:如果您不想使用predicates
或iteration
,请使用set
替换对象
例如。
val video = (...,read = true) //or however you are getting the current model
val updatedVideo = video
updatedVideo.read = true
vids[vids.indexOf(video)] = updatedVideo
【讨论】:
以上是关于在 Kotlin 中更改可变列表中的值的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin集合操作 ② ( MutableList 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )
Kotlin集合操作 ② ( MutableList 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )
Kotlin集合操作 ② ( MutableList 可变列表集合 | 修改 MutableList 集合的 mutator 函数 )