📜  斯卡拉流

📅  最后修改于: 2022-05-13 01:55:34.869000             🧑  作者: Mango

斯卡拉流

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()