Scala Streamで無限に要素をもつコレクションをあつかう
Scala Standard Library 2.12.8 - scala.collection.immutable.Streamをつかうと、無限に要素をもつコレクションをあつかえるらしい。
実際のところは、要素の生成を後回しにして、無限の要素があるかのようにふるまうということらしい。
Javaだと、なつかしいところで、http://commons.apache.org/collections/apidocs/org/apache/commons/collections/list/LazyList.htmlこんなのもつかったことあったなあ。
Streamもやっぱり、要素を生成する処理を記述して、使用する。
scala> def makeSameElement(x: Int): Stream[Int] = Stream.cons(x, makeSameElement(x)) makeSameElement: (x: Int)Stream[Int] scala> makeSameElement(1) take 10 res6: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> val a = makeSameElement(1) take 10 a: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> a foreach println 1 1 1 1 1 1 1 1 1 1
Stream.consは、#::でもよいらしい。
scala> def makeNaturalNumber(x: Int): Stream[Int] = x #:: makeNaturalNumber(x + 1) makeNaturalNumber: (x: Int)Stream[Int] scala> val b = makeNaturalNumber(1) take 10 b: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> b.foreach(println) 1 2 3 4 5 6 7 8 9 10 scala>