
Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 18, 2024
In this tutorial, we’ll see how we can replace elements in a Scala List by index.
Here’s the List we’ll be working with:
scala> val lst = List('a', 'b', 'c', 'd')
val lst: List[Char] = List(a, b, c, d)
There are multiple ways to replace elements in a List. A common theme is that all of them follow Scala’s philosophy of immutability – a new List is returned, and the original List is not modified.
Let’s look at the different techniques.
The first solution we’ll look at is a naive approach. Given a List, we can map its elements together with the index:
scala> lst.zipWithIndex.map { case (elem, idx) => if idx == 2 then 'z' else elem }
val res0: List[Char] = List(a, b, z, d)
We should note that we make use of the zipWithIndex() method to add the index of each corresponding element. This allows us to operate based on the index as we want.
While the previous approach worked just fine, there’s a more convenient solution using the updated() method:
scala> lst.updated(2, 'z')
val res1: List[Char] = List(a, b, z, d)
This is a bit more straightforward solution, with less boilerplate code.
The last solution we’ll look into is using the patch() method which is a bit more powerful.
This method requires three arguments:
Let’s see how we can use it:
scala> lst.patch(2, Seq('z'), 1)
val res2: List[Char] = List(a, b, z, d)
In the example above, we replace the sub-sequence of size one that starts at index 2, with the element ‘z‘.
scala> lst.patch(2, Seq('z'), 2)
val res3: List[Char] = List(a, b, z)
In the example above, we replace the sub-sequence of size two that starts at index 2 (i.e., elements ‘b‘ and ‘c‘), with a single element ‘z‘. If we pass a bigger length also, it works just fine:
scala> lst.patch(2, Seq('z'), 3)
val res4: List[Char] = List(a, b, z)
scala> lst.patch(2, Seq('z', 'y'), 1)
val res5: List[Char] = List(a, b, z, y, d)
In the code above, we replaced a sub-sequence with a multi-element sequence.
In this article, we looked at different ways to replace elements in a List by index.