当我遇到这个时,我正试图对scala REPL做点什么。假设我有一个列表说
val list1:List[String]=List("test1","test2")
我有类似的东西
val list2:Option[List[String]]=Some(List("test1"))
我正在尝试交叉方法并尝试了这个
list2.getOrElse(List.empty).intersect(list1)
我期待结果是List(" test1")而不是我有一个空列表。我在这里缺少什么?
答案 0 :(得分:1)
嗯。我无法重现这个问题:
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val list1:List[String]=List("test1","test2")
list1: List[String] = List(test1, test2)
scala> val list2:Option[List[String]]=Some(List("test1"))
list2: Option[List[String]] = Some(List(test1))
scala> list2.getOrElse(List.empty).intersect(list1)
res0: List[String] = List(test1)
答案 1 :(得分:1)
使用fold
可能是一种更惯用的方法。
scala> :pa
// Entering paste mode (ctrl-D to finish)
val list1:List[String]=List("test1","test2")
val list2:Option[List[String]]=Some(List("test1")) // first try it with Some()
// Exiting paste mode, now interpreting.
list1: List[String] = List(test1, test2)
list2: Option[List[String]] = Some(List(test1))
scala> list2.fold(List[String]()){_.intersect(list1)}
res22: List[String] = List(test1)
scala> val list2:Option[List[String]]=None // now try it with None
list2: Option[List[String]] = None
scala> list2.fold(List[String]()){_.intersect(list1)}
res23: List[String] = List()