繁体   English   中英

在 Kotlin 中更改可变列表中的值

[英]Change a value in mutable list in 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)]

我如何将ilike更改为true ,其中id2

这是我尝试过的:

        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
            }
        }

您可以使用find函数查找 id = 2 的元素并更改其属性:

vids?.find { it.id == 2 }?.iLike = true

注意:如果属性可以为空并且您不确定它是否为空使用问号是一种很好的做法。

如果您预计很少有项目(可能是 1 项或 2 项?)受到影响,
您可以filter列表,然后更改过滤项目的iLike

vids!!.filter { it.id == 2 }.forEach { it.iLike = true }

试试这个,我假设你的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)
    }
}

我必须更改几个属性,并且需要保存更改后的对象。 因此,以下方法对我更有效:

//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 

如果不想使用predicatesiteration请使用set替换对象

例如。

val video = (...,read = true) //or however you are getting the current model
val updatedVideo = video
updatedVideo.read = true
vids[vids.indexOf(video)] = updatedVideo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM