2015-07-20 32 views
2

有没有比通过Seq更优雅的方法?如何从Scala集创建无限集合

val origin = Set("a", "b") 
val intermediate = origin.toSeq 
val stream = Stream.from(0).map { index => 
    intermediate(index % intermediate.size) 
}.toIterator 

stream.next() // => "a" 
stream.next() // => "b" 
stream.next() // => "a" 

我特别针对Scala 2.9。

+4

这您可能感兴趣的:http://stackoverflow.com/questions/2097851/scala-repeat-a-finite-list-infinitely –

+0

@AlexisC。为什么不是这个答案?这正是我期待的! –

回答

1

此问题与this one非常相似。

最简单的方法是使用递归定义:

val stream: Stream[String] = origin.toStream #::: stream 

#:::是流连接运算符。它等效于:

val stream: Stream[String] = origin.toStream.append(stream)