【问题标题】:Scala group Stream elements without evaluating the whole Stream [duplicate]Scala 分组 Stream 元素而不评估整个 Stream [重复]
【发布时间】:2018-04-04 12:49:11
【问题描述】:

如果我有这样的排序流:

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))

没有立即对流进行完全评估?

【问题讨论】:

  • Stream(1, 1, 2, 2, 2, 3, 4, 4, 5).groupBy(identity).values.map(_.toList)

标签: scala stream scala-streams


【解决方案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))
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2018-03-22
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多