list - Scala,无限重复有限列表

标签 list scala stream infinite

我想在 Scala 中使用 Stream 类来无限重复给定的列表。

例如列表 (1,2,3,4,5) 我想创建一个流,给我 (1,2,3,4,5,1,2,3,4,5,1,2,3 ....)

这样我就可以包装 take 操作。我知道这可以通过其他方式实现,但出于某种原因我想这样做,只是幽默我:)

所以这个想法是,通过从某个列表创建这个无限循环,我可以使用 take 操作,当它到达列表的末尾时它会循环。

如何制作一个简单地重复给定列表的流?

最佳答案

与@Eastsun 的非常相似,但更能揭示意图。在 Scala 2.8 中测试。

scala> val l  = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> Stream.continually(l.toStream).flatten.take(10).toList
res3: List[Int] = List(1, 2, 3, 1, 2, 3, 1, 2, 3, 1)

或者,使用 Scalaz:
scala> import scalaz._
import scalaz._

scala> import Scalaz._
import Scalaz._

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.toStream.repeat[Stream].join.take(10).toList
res7: List[Int] = List(1, 2, 3, 1, 2, 3, 1, 2, 3, 1)

关于list - Scala,无限重复有限列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097851/

相关文章:

c++ - 是否可以使用一行代码从 std::cin 中提取格式化输入?

python - 如何将列表中的所有数字变成负数?

scala - 如何将 Spark 的累加器传递给函数?

scala - super 在两个层次结构中具有相同方法的行为

json - 如果缺少可选值,则显式输出JSON null

stream - 为什么这个 Dart 广播流不接受多个监听调用

java - 将一种元素类型的列表转换为另一种类型的列表

java - 如何初始化具有特定类型的列表数组?

python - 将列表切片追加回原始列表是否只是复制地址?

java - 当使用 ObjectOutputStream/ObjectInputStream 传输自定义对象时,变量将被重置