首页 > 解决方案 > 从 List 的 Option[Any] 中获取元素

问题描述

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

这没有按预期返回。请建议。

标签: scalalistoption

解决方案


我建议你使用模式匹配。为了防御,我还添加了一个Try以防止您的 json 不是数字列表的情况。下面的代码返回一个Option[Int],你可以调用.getOrElse(0)它——或者其他一些默认值,如果你喜欢的话。

import scala.util.Try

val first = a match {
  case Some(h :: _) => Try(h.toString.toInt).toOption
  case _ => None
}

推荐阅读