Search code examples
scalaimmutabilityoptional-values

Optionally adding items to a Scala Map


I am looking for an idiomatic solution to this problem.

I am building a val Scala (immutable) Map and would like to optionally add one or more items:

val aMap =
  Map(key1 -> value1,
      key2 -> value2,
      (if (condition) (key3 -> value3) else ???))

How can this be done without using a var? What should replace the ???? Is it better to use the + operator?

val aMap =
  Map(key1 -> value1,
      key2 -> value2) +
  (if (condition) (key3 -> value3) else ???))

One possible solution is:

val aMap =
  Map(key1 -> value1,
      key2 -> value2,
      (if (condition) (key3 -> value3) else (null, null))).filter {
        case (k, v) => k != null && v != null
      }

Is this the best way?


Solution

  • How about something along the lines of

    val optional = if(condition) Seq((key3 -> value3)) else Nil
    val entities = Seq(key1 -> value1, key2 -> value2) ++ optional
    val aMap = entities.toMap