Let's say I have a list:
val list = List(1, 2, 3, 4, 5)
I want to replace all/first items that satisfy a predicate, I know the following way to do it: (e.g. replace any number that is even with -1)
val filteredList = list.zipWithIndex.filter(_._2 % 2 == 0)
val onlyFirst = list.updated(filteredList.head._2, -1)
val all = for (i <- list) yield if (i % 2 == 0) -1 else i
Is there any collection function or nice Scala way that helps in this situation and has a good performance?
I also want to keep the order, so I don't want to use filterNot
and add other items to the list like: (it's also not efficient)
val onlyFirst = list.filterNot(_ % 2 != 0) ::: list.filter(_ % 2 == 0).map(x => -1)