Arroyo Scala

Stream es una lista perezosa donde los elementos se evalúan solo cuando son necesarios. Esta es una característica de Scala. Scala admite el cálculo perezoso. Aumenta el rendimiento de nuestro programa. Los flujos tienen las mismas características de rendimiento que las listas .

Sintaxis:

val str = 1 #:: 2 #:: 3 #:: Stream.empty

En Scala, una lista se puede construir con el operador :: , mientras que una secuencia se puede construir con el método del operador #:: Stream.empty , usando al final de la expresión. En la sintaxis anterior, la cabeza de esta secuencia es 1, y la cola tiene 2 y 3.

Operaciones en flujo

Crear una secuencia: a continuación se muestran los ejemplos para crear secuencias en Scala.
Ejemplo :

// 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) 
    } 
}

Producción:

Stream(1, ?)

En el resultado anterior, podemos ver que el segundo elemento no se evalúa. Aquí, se muestra un signo de interrogación en lugar del elemento. Scala no evalúa la lista hasta que se requiere. La cola no se imprime porque aún no se ha calculado. Los flujos se especifican para el cálculo perezoso.
 
Crear un Stream usando Stream.cons: También podemos crear un Stream usando Stream.cons. Se utiliza un paquete import scala.collection.immutable.Stream.conspara crear flujos.

Ejemplo :

// 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}")
    } 
}

Producción:

Elements of stream2 = Stream(1, ?)

 
Uso de la función de toma en la transmisión: la función de toma se usa para tomar elementos de la transmisión. A continuación se muestra el ejemplo del uso de la función de toma.

Ejemplo :

// 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
    } 
}

Producción :

Stream(1, ?)
Take first 2 numbers from stream = 1, 2, empty
Take first 10 numbers from stream2 = 1, 2, 8, empty

Cuando quisimos tomar 10 números de un Stream, aunque solo contenía 3 elementos, no arrojó ninguna excepción IndexOutOfBoundsException.
 

Uso de la función de mapa en la transmisión: la función de mapa se utiliza para realizar operaciones en la transmisión.

Ejemplo :

// 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}) 
    } 
}

Producción:

Stream(1, ?)
Stream(6, ?)

En el ejemplo anterior, al usar la función de mapa, estamos transformando la colección de entrada en una nueva colección de salida.
 
Inicialice una secuencia vacía: el código siguiente muestra cómo inicializar una secuencia vacía.
Ejemplo :

// 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")
    } 
}

Producción:

 Empty Stream = Stream()

Publicación traducida automáticamente

Artículo escrito por DivyaPareek y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *