scala> val a = jsonMap.get("L2_ID")
a: Option[Any] = Some(List(24493, 22774, 23609, 20517, 22829, 23646, 22779, 23578, 22765, 23657))
我想获取列表的第一个元素,即24493。因此,尝试使用以下代码:
scala> var b = a.map(_.toString)
b: Option[String] = Some(List(24493, 22774, 23609, 20517, 22829, 23646, 22779, 23578, 22765, 23657))
scala>
scala> var c = b.map(_.split(",")).toList.flatten
c: List[String] = List(List(24493, " 22774", " 23609", " 20517", " 22829", " 23646", " 22779", " 23578", " 22765", " 23657)")
scala> c(0)
res34: String = List(24493
这并没有像预期的那样回归。
3条答案
按热度按时间olhwl3o21#
我建议您使用模式匹配。为了防患于未然,我还添加了一个
Try
,以防止json不是数字列表的情况。下面的代码返回Option[Int]
,您可以对其调用.getOrElse(0)
-如果您愿意,也可以调用其他默认值。raogr8fs2#
所以,你有一个
Option
,它里面有List
。然后,scala> var b = a.map(_.toString)
将Option
(List
)的内容转换为String
。这不是你想要的。看看您的转换结果的类型,它们会为您提供非常好的提示。例如,b: Option[String]
会告诉您丢失了列表...另一方面,它的类型为
Option[List[String]]
:您已经将列表中的每个元素转换为字符串。如果您只是在寻找第一个元素,则不需要转换所有元素。像这样的事情就行了:
bqucvtff3#
如果您确定它是
Some
,并且列表不为空,那么您可以解开选项并使用.get
获得List[Int]
。然后,您可以使用.head
访问列表的第一个元素:如果您不在REPL中,并且不确定它是
Some
还是None
,并且List
是否有任何元素,则使用在拥有如此强大的类型系统的语言中,“字符串类型”编程当然不是必需的,因此将所有内容转换为字符串并用逗号分隔是一种有严重缺陷的方法。