0

我有一个键值对的映射,我正在尝试获取给定键的值,但是虽然它返回了一个值,但它附带了一些值,知道如何摆脱它吗?我的代码是:

val jsonmap = simple.split(",\"").toList.map(x => x.split("\":")).map(x => Tuple2(x(0), x(1))).toMap
val text = jsonmap.get("text")

其中“文本”是键,我想要它映射到的值,我目前得到以下输出:

Some("4everevercom")    

我尝试使用 flatMap 而不是 Map 但它也不起作用

4

4 回答 4

5

您正在寻找apply方法。SeqSetMap实现不同apply的方法,不同之处在于每种方法之间的主要区别。

作为语法糖,.apply可以在 中省略o.apply(x),所以你只需要这样做:

val text = jsonmap("text") // pass "key" to apply and receive "value"

For Seq,apply接受一个索引并返回一个值,就像您在自己的示例中使用的那样:

x(0), x(1)

对于Setapply接受一个值,并返回一个Boolean

于 2013-01-29T22:41:55.753 回答
4

正如@Brian 所说,您可以使用 getOrElse或“应用”方法并自行处理缺失值:

val text: String = jsonmap("text")
// would trow java.util.NoSuchElementException, if no key presented

此外,您可以设置一些默认值,以便 Map 可以回退到它,如果没有找到键:

val funkyMap = jsonmap.get("text").withDefaultValue("")
funkyMap("foo")
// if foo or any other key is not presented in map, "" will be returned

如果您想为所有缺失的键设置默认值,请使用它。

于 2013-01-29T22:27:01.850 回答
3

您可以使用getOrElsewhich 获取Some您指定的值或默认值。如果该键存在于地图中,您将从 中获取值Some。如果键不存在,您将获得指定的值。

scala> val map = Map(0 -> "foo")
map: scala.collection.immutable.Map[Int,String] = Map(0 -> foo)

scala> map.get(0)
res3: Option[String] = Some(foo)

scala> map.getOrElse(1, "bar")
res4: String = bar

此外,有关 Scala 的 Some and None 选项的信息,请参阅此:http: //www.codecommit.com/blog/scala/the-option-pattern

于 2013-01-29T22:17:14.193 回答
0

只是提供可能帮助您使用的其他选项Option以及您在标准库中可以找到的其他类似结构。

您还可以在选项上迭代(映射)。这是有效的,因为OptionIterable包含零或一个元素。

myMap.get(key) map { value =>
  // use value...
}

等效地,您可以使用 afor如果您觉得它可以使代码更清晰:

for (value <- myMap.get(key)) {
  // use value...
}
于 2013-01-30T13:53:38.957 回答