可选地向Scala Map添加项目

cvxl0en2  于 2023-08-05  发布在  Scala
关注(0)|答案(3)|浏览(101)

我正在寻找一个解决这个问题的惯用方法。
我正在构建一个val Scala(不可变)Map,并希望有选择地添加一个或多个项目:

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

字符串
如果不使用var,该如何实现这一点????应该用什么来取代?使用+运算符是否更好?

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


一种可能的解决方案是:

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


这是最好的办法吗?

des4xlb0

des4xlb01#

不如来点

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

字符串

yx2lnoni

yx2lnoni2#

另一种可能性是利用Option的可迭代特性。
非空值o

scala> val o = Some('z' -> 3)
scala> (Seq('x' -> 1, 'y' -> 2) ++ o).toMap
res1: scala.collection.immutable.Map[Char,Int] = Map(x -> 1, y -> 2, z -> 3)

字符串
空值o

scala> val o = None
scala> (Seq('x' -> 1, 'y' -> 2) ++ o).toMap
res2: scala.collection.immutable.Map[Char,Int] = Map(x -> 1, y -> 2)

5jvtdoz2

5jvtdoz23#

您可以直接添加到Map:

scala> val map = Map(1 -> 2, 3 -> 4)
scala> val some = Some(5 -> 6)
scala> val none = None
scala> val combinedMap = map ++ some ++ none
combinedMap: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 3 -> 4, 5 -> 6)

字符串

相关问题