Translate boolean flags to collection of numbers in scala I'm having trouble to implement the following requirement in a functional way in scala. Given a predefined number of boolean flags, I want to build up a collection of numbers. For each (true) flag, a hardcoded number should be included in the collection.

This is the unsatifying solution I have so far:

  def createCodeArray(flagA:Boolean, flagB:Boolean, flagC:Boolean): Seq[Int] = {
    val codes = ListBuffer.empty[Int]

    if(flagA) codes += 2
    if(flagB) codes += 7
    if(flagC) codes += 12

    return codes
  }


I'm trying to achieve to same with pattern matching, but I don't want to list all the possible combinations. Also, I'd like to avoid mutable data-structures.

Any suggestion on how to write this in a functional way is much appreciated
You could use tuples to pair your flags with an Int. Throw those into a Seq and then perform a filter and then a map on that Seq. Here is how that would look:

def f(a: Boolean, b: Boolean, c: Boolean): Seq[Int] = {

 val xs = Seq((a, 2), (b, 7), (c, 12))

 xs.filter(t =&gt; t._1).map(t =&gt; t._2) 

}


Note that in Scala you don't need to use a return statement as long as the last bit of code in your function returns a new value.