斯卡拉流
Stream 是一个惰性列表,其中元素仅在需要时才被评估。这是一个 Scala 功能。 Scala 支持惰性计算。它提高了我们程序的性能。流具有与列表相同的性能特征。
句法 :
val str = 1 #:: 2 #:: 3 #:: Stream.empty
在 scala 中,可以使用::运算符构造 List,而可以使用#::运算符方法构造 Stream,在表达式末尾使用Stream.empty
。在上面的语法中,这个流的头部是 1,它的尾部有 2 和 3。
Stream 上的操作
创建流:以下是在 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 在需要之前不会评估列表。尾部没有打印出来,因为它还没有被计算出来。流被指定为惰性计算。使用 Stream.cons 创建 Stream:我们也可以使用 Stream.cons 创建 Stream。包import 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
当我们想从 Stream 中取出 10 个数字时,虽然它只包含 3 个元素,但它并没有抛出任何 IndexOutOfBoundsException。
在stream上使用map函数: map函数用于对stream进行操作。
例子 :
// 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()