簡體   English   中英

Scala模式匹配在Stream上不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM