Scala group Stream元素而不评估整个Stream

时间:2017-10-23 20:55:53

标签: scala stream scala-streams

如果我有这样的已排序流:

Stream(1, 1, 2, 2, 2, 3, 4, 4, 5)

如何将其内容分组如下:

Stream(List(1, 1), List(2, 2, 2), List(3), List(4, 4), List(5))

不立即对流进行完全评估?

1 个答案:

答案 0 :(得分:1)

你可以使用类似的东西,但它只适用于排序的流

def groupValues(stream: Stream[Int]): Stream[List[Int]] = {
    if(stream.isEmpty) {
      Stream.empty
    } else {
      val head = stream.head
      val list = stream.takeWhile(_ == head).toList
      list #:: groupValues(stream.drop(list.size))
    }
  }