Scala Stream
Stream是一个懒惰的列表,其中的元素只有在需要时才被评估。这是Scala的一个特点。Scala支持懒人计算。它可以提高我们程序的性能。流具有与列表相同的性能特征。
语法:
val str = 1 #:: 2 #:: 3 #:: Stream.empty
在scala中,List可以用 :: 操作符来构造,而Stream可以用 # : : 操作符的方法来构造,在表达式的最后使用Stream.empty。在上面的语法中,这个流的头部是1,它的尾部是2和3。
对流的操作
创建一个流: 下面是在Scala中创建一个流的例子。
例子
// Program to creating an empty stream
// Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
// Creating stream
val stream = 1 #:: 2#:: 8 #:: Stream.empty
println(stream)
}
}
输出
Stream(1, ?)
在上面的输出中,我们可以看到,第二个元素没有被评估。在这里,一个问号显示在元素的位置上。Scala在需要的时候才会评估list。尾部没有被打印出来,因为它还没有被计算出来。
使用Stream.cons创建一个流: 我们也可以通过使用Stream.cons创建一个流。一个导入scala.collection.immutable.Stream.cons的包被用于创建流。
例子。
// Program to creating an stream
// using cons
import scala.collection.immutable.Stream.cons
// Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
// Creating stream
val stream2: Stream[Int] = cons(1, cons(2, cons(3, Stream.empty) ) )
println(s"Elements of stream2 = ${stream2}")
}
}
输出
Elements of stream2 = Stream(1, ?)
在流中使用take函数: take函数用于从流中提取元素。下面是使用take函数的例子。
例子:
// Program to Using take function on stream
// Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
// Creating stream
val stream = 1 #:: 2#:: 8 #:: Stream.empty
println(stream)
// Taking elements from stream
print("Take first 2 numbers from stream = ")
stream.take(2).print
print("\nTake first 10 numbers from stream2 = ")
stream.take(10).print
}
}
输出:
Stream(1, ?)
Take first 2 numbers from stream = 1, 2, empty
Take first 10 numbers from stream2 = 1, 2, 8, empty
当我们想从一个流中提取10个数字时,尽管它只包含3个元素,但它并没有抛出任何IndexOutOfBoundsException。
在流中使用map函数: map函数被用来对流进行操作。
例子:
// Scala program to using map function on stream
// Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
// Creating stream
val stream = 1 #:: 2#:: 8 #:: Stream.empty
println(stream)
// map elements from stream
println(stream.map{_+5})
}
}
输出
Stream(1, ?)
Stream(6, ?)
在上面的例子中,通过使用map函数,我们将输入的集合转换为一个新的输出集合。
初始化一个空流: 下面的代码显示了如何初始化一个空流。
例子
// Program to create empty stream
// Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
// Creating empty stream
val emptyStream: Stream[Int] = Stream.empty[Int]
println(s"Empty Stream = $emptyStream")
}
}
输出
Empty Stream = Stream()
极客教程