object Main extends App { def fizzBuzz(num: Int, mapping: Map[Int, String]): List[Either[Int, String]] = (1 to num).toList map { i ⇒ mapping.toList.sorted flatMap { case (k, v) if i % k == 0 ⇒ List(v) case _ ⇒ Nil } match { case Nil ⇒ Left(i) case rs ⇒ Right(rs.mkString) } } fizzBuzz(16, Map(3 → "Fizz", 5 → "Buzz")) foreach println }