我试着编写这3个代码但没有成功:
aList.foldLeft(List()){(accu, element) => map.get(elment):::accu}
aList.foldLeft(List()){(accu, element) => if (!map.get(element).isEmpty) map.get(element):::accu}
aList.foldLeft(List()){(accu, element) => map.get(elment).exists(_:::accu)}
有没有人知道如何将Option连接到列表?
的UE
答案 0 :(得分:24)
要将选项与列表连接起来,您可以执行option.toList ++ list
将Option[List[A]]
与List[A]
optionOfList.toList.flatten ++ list
基本的想法是,您始终可以将选项转换为0或一个元素的列表,这样可以轻松地以不同方式将它们与列表组合。
答案 1 :(得分:1)
撒上一些 scalaz :
import scalaz._; import Scalaz._
并设置:
scala> val optList = some(List(1, 2, 3, 4)
optList: Option[List[Int]] = Some(List(1, 2, 3, 4))
scala> val list = List(5, 6, 7)
list: List[Int] = List(5, 6, 7)
然后我可以做:
scala> ~optList ::: list
res0: List[Int] = List(1, 2, 3, 4, 5, 6, 7)
基本上~
是附加到Option[A]
的一元方法,其中{em> 0 类型为A
。列表的零当然是Nil
答案 2 :(得分:1)
如果您想在列表末尾添加一个选项,则只需使用List.++
val ss = Seq(1,2) // ss: Seq[Int] = List(1, 2)
ss ++ Option(3) // res0: Seq[Int] = List(1, 2, 3)
答案 3 :(得分:0)
@oxbow_lakes和@rjsvaljean的答案非常好,但他们仍然错过了一个可以通过非常惯用的Scala解决的可能案例:
scala> List(1,2,3)
res6: List[Int] = List(1, 2, 3)
scala> Option(List(5,6,7))
res7: Option[List[Int]] = Some(List(5, 6, 7))
scala> for (l<-res7) yield l ++ res6
res8: Option[List[Int]] = Some(List(5, 6, 7, 1, 2, 3))
scala> for(l<-(None:Option[List[Int]])) yield l ++ res6
res9: Option[List[Int]] = None
上述代码所示的缺失案例应该None
收取None
而不是Nil
?