Streams recursivos y colección en Scala

Las formas recursivas tienen su definición en términos de sí mismas, como si tuviéramos subcarpetas en carpetas que además pueden tener subcarpetas. Los métodos recursivos que se llaman a sí mismos también son una forma recursiva. Se pueden usar formularios similares para crear una secuencia recursiva.

Ejemplo 1: Creación de una lista perezosa

// Scala program for resursive stream
// creating object 
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // second con can be recursive
        lazy val geek = Stream.cons(1, Stream.cons(5, Stream.empty))
          
        println (geek)
          
        (geek take 4) foreach {
            x => println(x)
          
        } 
    } 
} 

Producción :

Stream(1, ?)
1
5

En el código anterior, la segunda estafa puede ser recursiva.

Ejemplo 2: Cree una lista perezosa colocando una llamada recursiva al método

// Scala program for resursive stream
  
// creating object 
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // con can be recursive
        def geek(n: Int): Stream[Int] = Stream.cons(n, geek(n+1))
          
        // Creating lazy val
        lazy val q = geek(5)
          
        println(q) 
    } 
} 

Producción :

Stream(5, ?)

Ejemplo 3: cree una lista perezosa colocando una llamada recursiva al método de manera breve y clara

// Scala program for resursive stream
  
// creating object 
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // recursive stream
        def geek(n: Int):Stream[Int] = n #:: geek(n+1)
          
        // Lazy value
        lazy val q = geek(5)
          
        println(q)
  
    } 
} 

Producción :

Stream(5, ?)

Colecciones de corrientes

Las colecciones de flujo en Scala son muy importantes, ya que permiten que no sea necesario eliminarlas explícitamente. Declarativamente, las cosas se pueden realizar utilizando combinadores funcionales como map, filter y flatMap. Los flujos son colecciones perdidas perezosas.

Ejemplo 4:

// Scala program for stream collection
  
// creating object 
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // creating Stream
        def geek(n: Int):Stream[Int] = n #:: geek(n+1)
          
        lazy val g = geek(0)
          
        println (g)
        println (g.take(10).mkString(" ; "))
    } 
} 

Producción :

Stream(0, ?)
0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9)

Ejemplo 5: Usar filtro

// Scala program for filter list
  
// creating object 
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // Creating list
        val geek = List(1, 2, 3, 4)
          
        // Using filter
        val abc = geek filter { x => x > 2 }
        println(abc)
    } 
} 

Producción :

List(3, 4)

filter se llama sobre la lista geek. Toma función como argumento y devuelve un valor booleano, que es un predicado de función. Cada elemento se ejecuta a través de la función y los elementos se filtran cuando la función devuelve falso. Da como resultado una nueva lista y la lista «geek» original permanece persistente.

Ejemplo 6: Usar el filtro de una manera mucho más concisa

// Scala program for collection
  
// creating object 
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // Creating list
        val geek = List(1, 2, 3, 4)
          
        // Filter list
        val abc = geek filter { _ > 2 }
        println(abc)
  
    } 
} 

Producción :

List(3, 4)

En el código anterior, no es necesario nombrar el elemento. El elemento es referido por una forma más corta a través de a_. Además, no hay necesidad de calificar la llamada al método.

Publicación traducida automáticamente

Artículo escrito por ankita_saini 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 *