'Change a value in mutable list in Kotlin

I got this mutablelist:

[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)]

How can I change ilike to true where id is 2

This is what I've tried:

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


Solution 1:[1]

If you expect few items (maybe 1 or 2?) to be affected,
you can filter the list and then change iLike of the filtered items:

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

Solution 2:[2]

Try this, I'm assuming your Videos structure is a data class defined somewhat like so. 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)
    }
}

Solution 3:[3]

I had to change several properties and I had a need to hold the changed object. Therefore following approach worked better for me:

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

Solution 4:[4]

Use set to replace the object if you don't want to use predicates or iteration

Eg.

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 Azizjon Kholmatov
Solution 4 Aziz