包含在选项中的列表中的元素

fra*_*cca 0 collections scala option

有没有更好/更短/更简洁的方式来写这个?

def elementOrNone[T](values: List[T], index: Int): Option[T] =
   values match { 
    case Nil => None
    case _ => Some(values(index))
}
Run Code Online (Sandbox Code Playgroud)

om-*_*nom 8

val xs = List(1,2,3)
scala> xs.lift(1)
//res2: Option[Int] = Some(2)

scala> xs.lift(10)
//res3: Option[Int] = None

scala> val ys = List.empty[Int]
// ys: List[Int] = List()

scala> ys.lift(0)
// res1: Option[Int] = None
Run Code Online (Sandbox Code Playgroud)

(但与你的代码不同,如果你要求索引大于集合大小的元素,请不要抛出java.lang.IndexOutOfBoundsException - 我不知道它对你有好处还是坏处).

  • 值得注意的是,这是有效的,因为`List [A]`将`PartialFunction [Int,A]`作为其超类型之一,并且任何部分函数都可以被提升为带有'Option`包装结果的总函数. (5认同)
  • 值得注意的是,虽然`xs.lift(1)`看起来像是一个无辜的方法调用,它实际上每次创建一个函数实例然后调用它的apply方法. (3认同)