Search code examples
scaladictionaryfilter

How to combine filter and map in Scala?


I have List[Int] in Scala. The List is List(1,2,3,4,5,6,7,8,9,10). I want to filter the list so that it only has even numbers. And I want to multiply the numbers with 2.

Is it possible?


Solution

  • As I state in my comment, collect should do what you want:

    list.collect{
      case x if x % 2 == 0 => x*2
    }
    

    The collect method allows you to both specify a criteria on the matching elements (filter) and modify the values that match (map)

    And as @TravisBrown suggested, you can use flatMap as well, especially in situations where the condition is more complex and not suitable as a guard condition. Something like this for your example:

    list.flatMap{
      case x if x % 2 == 0 => Some(x*2)
      case x => None
    }