附加可选元素列表

时间:2013-12-31 09:01:27

标签: scala sequence option

我需要创建一个序列,给定一个包含可选字符串列表的列表,将它们连接起来以创建一个新列表。我的代码如下所示:

      res.foldLeft(Seq[Option[Seq[String]]]())((acc, v) => v match {
      case Some(x) => acc ++: Some(x)
      case None => acc
    })

其中res是包含可选列表元素的列表,例如:

List(Some(Seq(foo)), Some(Seq(bar)), None, Some(Seq(baz, blah)))

我在符号++:处收到编译错误:

  type mismatch; found : Iterable[Equals] required: Seq[Option[Seq[String]]]

我在这里做错了什么?

3 个答案:

答案 0 :(得分:4)

你为什么不这样做:

res.flatten.flatten

首先flatten将摆脱None并公开Option,第二个将在Seq上执行预期的展平操作

答案 1 :(得分:0)

我没有在此框中安装scala,但您可以尝试使用'map'功能删除等式中的选项,然后将seq列表展平为单个可迭代。

这样的事情:

res.map.flatten

据我所知,你最终会得到一个包含'foo','bar','sez','bar'的Iterable。

稍后我会检查一下,以测试语法是否正确以及我写的内容确实有效..

干杯,亚伦

编辑:有权访问我的scala终端,这有效:

res.map(s => s).flatten.flatten

答案 2 :(得分:0)

case Some(x) => acc ++: Some(x)部分中的类型错误。

++:运算符需要类型为Seq[Option[Seq[String]]]的参数,但您提供的类型为Option[Seq[String]]的参数。

ps:如果你能准确地说出你期望的结果。我可以改进这个答案,帮助您编写所需的正确代码。