我是Scala的新手,我正在尝试转换格式的代码
val series: ListBuffer[Seq[Seq[Any]]] = ListBuffer[Seq[Seq[Any]]]()
points.foreach(point => {
if( conditionA )
series += doA(...) // returns a ListBuffer[Seq[Any]]
else
series += doB(...) // returns a ListBuffer[Seq[Any]]
})
使用.map()。我在想它的东西:
val series: ListBuffer[Seq[Seq[Any]]] = points.map(point => {
case conditionA => doA(...)
case _ => doB(...)
})
但这不编译,因为(我相信)映射序列作为单个Seq [Any]而不是Seq [Seq [Any]]附加,所以我得到错误
Expression of type Seq[Any] doesn't conform to expected type ListBuffer[Seq[Seq[Any]]]
有什么想法吗?语法有问题吗?
答案 0 :(得分:3)
让我假设一些事情,你有一些函数def doA(arg1: A): ListBuffer[Seq[Any]]
,这样你最终希望在将此函数映射到集合之后到达List[Seq[Any]]
作为最终结果类型。那么你想要的是flatMap
而不是map
:
val series = points flatMap{
case point if conditionA(point) => doA(point) result ()
case point => doB(point) result ()
}
我做出这样一个假设的原因是,您希望在一般形式中使用ListBuffer[A]
的唯一原因是通过一些副作用表达式创建List[A]
。因此,您最终希望List[Seq[A]]
作为最终输出。