[英]Scala pattern match not working on Stream?
我進行分組,然后得到key -> Stream(of values)
然后,我需要在流集合上進行模式匹配以訪問最后一項,但模式匹配不起作用。
當我使用Seq手動構建值列表時,相同的模式匹配代碼有效
所以我的問題是有沒有辦法將Stream轉換為Seq或List?
IDE說toSeq
是多余的
當我使用Seq手動構建值列表時,相同的模式匹配代碼有效
在Scala 2.12中, Seq
(或序列)默認為List
,請參見以下問題 :
scala> Seq(1,2,3)
res3: Seq[Int] = List(1, 2, 3)
這可能就是為什么模式匹配在您的序列(碰巧是一個List
)而不是Stream
上起作用的原因,請參閱此問題 。
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)
或使用此答案,您不必轉換為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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.