Edu*_*ruh 4 arrays android loops kotlin
我得到了这个可变列表:
[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)]
Run Code Online (Sandbox Code Playgroud)
我该如何更改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
}
}
Run Code Online (Sandbox Code Playgroud)
Use*_*ase 12
我必须更改几个属性,并且需要保存更改后的对象。因此,以下方法对我来说效果更好:
//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
Run Code Online (Sandbox Code Playgroud)
for*_*pas 11
如果您预计很少有项目(可能是 1 个或 2 个?)受到影响,
您可以filter列出并更改iLike已过滤的项目:
vids!!.filter { it.id == 2 }.forEach { it.iLike = true }
Run Code Online (Sandbox Code Playgroud)
试试这个,我假设你的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)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用findfunction查找id = 2的元素并更改其属性:
vids?.find { it.id == 2 }?.iLike = true
Run Code Online (Sandbox Code Playgroud)
注意:如果属性可为空并且不确定该属性是否为null ,则最好使用问号。
set如果您不想使用predicates或则用于替换对象iteration
例如。
val video = (...,read = true) //or however you are getting the current model
val updatedVideo = video
updatedVideo.read = true
vids[vids.indexOf(video)] = updatedVideo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4505 次 |
| 最近记录: |