我进行分组,我得到key -> Stream(of values)
然后我需要在流集合上进行模式匹配以访问最后一个项目 但是模式匹配不起作用。
当我使用Seq手动构建值列表时,相同的模式匹配代码有效
所以我的问题是否有办法将Stream转换为Seq或List?
IDE表示toSeq
是多余的
答案 0 :(得分:4)
当我使用Seq手动构建值列表时,相同的模式匹配代码有效
在scala 2.12中,Seq
(或序列)默认为List
,请参见以下question:
scala> Seq(1,2,3)
res3: Seq[Int] = List(1, 2, 3)
这可能就是为什么模式匹配在您的序列(碰巧是List
)而不是Stream
上起作用的原因,请参见question。
IDE说toSeq是多余的
Stream
确实是Seq
:
Stream(1,2,3).toSeq
res4: collection.immutable.Seq[Int] = Stream(1, 2, 3)
所以我的问题是否有办法将Stream转换为Seq或List?
要将Stream
转换为List
,可以调用.toList
方法:
Stream(1,2,3).toList
res5: List[Int] = List(1, 2, 3)
答案 1 :(得分:2)
或者使用此Answer,您不必转换为List
:
val n: Seq[Any] = Stream(..)
n match {
case Nil => "Empty"
case h :: t => "Non-empty"
case h #:: t => "Non-empty stream"
}
对于Stream,concat符号应为#::,模式匹配应为:
请确保您反转了Stream-这样就得到了最后一个元素,这里是一个示例:
n.reverse match {
case Nil => "Empty"
case h #:: _ => s"last element is $h"
}
在这里ScalaFiddle
检查