# 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

• Could you tell us more about where these flags come from, how this method is called, and how the resulting list will be used? – 200_success May 19 '17 at 12:49
• @200_success this should not matter for this question, the method's functionality and signature should just remain as it is – Raphael Roth May 19 '17 at 18:43

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 => t._1).map(t => 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.

• @thanks, I'm aware that the return statement is not needed, still I'd like to use it to make the code more "speaking" – Raphael Roth May 19 '17 at 18:44
• @Raphael, sure with return statement it is more "speaking", but it is against Scala coding style. A good explanation is given here. – Antot May 20 '17 at 6:16