我需要创建一个序列,给定一个包含可选字符串列表的列表,将它们连接起来以创建一个新列表。我的代码如下所示:
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]]]
我在这里做错了什么?
答案 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:如果你能准确地说出你期望的结果。我可以改进这个答案,帮助您编写所需的正确代码。