SCALA- SEQUENCES AND VECTOR

  • date 18th January, 2022 |
  • by Prwatech |
  • 0 Comments

Benefits of Using Vector in Scala

  Sequence 
  • A sequence is implemented by list(list is immutable) 
  • Sequence support mutability and immutability. 
Note: When pass mutability package: import scala.collection.mutable.seq  .It return array Buffer.  package Collection     
class SequenceExampl { 

  val seq1 = Seq(3,4,5,6,7) 

  println(seq1) 

} 

object Seq1{ 

  def main(args:Array[String]):Unit={ 

    new SequenceExampl() 

  } 

}
 

Output:  

List(3, 4, 5, 6, 7)    Process finished with exit code 0  The list follows FIFO.  package Collection     
class SequenceExampl { 

  val seq1 = Seq(3,4,5,6,7) 

  println(seq1) 

  def checkElements() ={ 

    seq1.foreach(ele =>println("Access of elements :" +ele)) 

    println(seq1(4)) 

  } 

} 

object Seq1 { 

  def main(args: Array[String]): Unit = { 

    new SequenceExampl().checkElements() 

  } 

}
  Output:  List(3, 4, 5, 6, 7)  7    Process finished with exit code 0  Example:  package Collection   
import scala.collection.mutable.Seq 

class SequenceExampl { 

  val seq1 = Seq(3,4,5,6,7) 

  seq1(3) = 60 

 

  println(seq1) 

  def checkElements() ={ 

    seq1.foreach(ele =>println("Access of elements :" +ele)) 

    println(seq1(4)) 

  } 

} 

object Seq1 { 

  def main(args: Array[String]): Unit = { 

    new SequenceExampl().checkElements() 

  } 

}
  Output:   ArrayBuffer(3, 4, 5, 60, 7)    Vector: 
  • Vector is good for large elements. 
  • Vector is by default immutable. 
package Collection     
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    println(ve) 

  } 

  object VecE{ 

    def main(args:Array[String]):Unit={ 

      new VectorExample() 

    } 

  }
    Output:  Vector(23, 24, 25, 26, 27, 28, 29, 30)    Process finished with exit code 0  Explanation: Vector return vector. It is immutable.  Question: Can we access the index value?  package Collection     
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    println(ve) 

  println("return the index value 4 :" +ve(4)) 

  println("return the index value 5 :" +ve(5)) 

  println("return the index value 6 :" +ve(6)) 

  println("return the index value 7 :" +ve(7)) 

} 

  object VecE{ 

    def main(args:Array[String]):Unit={ 

      new VectorExample() 

    } 

  }
  Output:  Vector(23, 24, 25, 26, 27, 28, 29, 30)    Process finished with exit code 0   Example :  package Collection   
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    ve(4) =33 

   println(ve) 

    println(ve(4)) 

} 

  object VecE{ 

    def main(args:Array[String]):Unit={ 

      new VectorExample() 

    } 

 }
   

Output: 

value update is not a member of scala.collection.immutable.Vector[Int]  did you mean updated?      ve(4) =33  package Collection     
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    val ve1 = ve:+(3,4) 

  val ve2 = ve++ve1 

  def ve_fun()= { 

    println("Size of ve2 :" + ve2.size) 

    println("First values of ve2 :" + ve2.head) 

    println("Reverse elements of ve2 : " +ve2.reverse) 

    // println("Sorted(ASC) order : " + ve2.sorted) 

    //reverse is not working as ve2 elements (3,4) it's not a separate elements it's single elements and during running its not getting understand so throw error 

  } 

    println(ve) 

} 

  object VecE { 

    def main(args: Array[String]): Unit = { 

      new VectorExample().ve_fun() 

    } 

  }
  Output:  Vector(23, 24, 25, 26, 27, 28, 29, 30)  Size of ve2 :17  First values of ve2 :23  Reverse elements of ve2 : Vector((3,4), 30, 29, 28, 27, 26, 25, 24, 23, 30, 29, 28, 27, 26, 25, 24, 23)    Process finished with exit code 0  package Collection     
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    val ve1 = ve:+(3,4) 

  val ve2 = ve++ve1 

    println("values of value ve2 :" +ve2) 

  def ve_fun()= { 

    println("Size of ve2 :" + ve2.size) 

    println("First values of ve2 :" + ve2.head) 

    println("Reverse elements of ve2 : " +ve2.reverse) 

    //println("Sorted(ASC) order : " + ve2.sorted) 

    } 

    println(ve) 

} 

  object VecE { 

    def main(args: Array[String]): Unit = { 

      new VectorExample().ve_fun() 

    } 

  }
  Output:  values of value ve2 :Vector(23, 24, 25, 26, 27, 28, 29, 30, 23, 24, 25, 26, 27, 28, 29, 30, (3,4))  Vector(23, 24, 25, 26, 27, 28, 29, 30)  Size of ve2 :17  First values of ve2 :23  Reverse elements of ve2 : Vector((3,4), 30, 29, 28, 27, 26, 25, 24, 23, 30, 29, 28, 27, 26, 25, 24, 23)    Process finished with exit code 0  Example:   package Collection     
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    val ve1 = ve:+(3,4) 

  val ve2 = ve++ve1 

    println("values of value ve2 :" +ve2) 

  def ve_fun()= { 

    println("Size of ve2 :" + ve2.size) 

    println("First values of ve2 :" + ve2.head) 

    println("Reverse elements of ve2 : " +ve2.reverse) 

    println("Sorted(ASC) order : " + ve2.sorted) 

    } 

    println(ve) 

} 

  object VecE { 

    def main(args: Array[String]): Unit = { 

      new VectorExample().ve_fun() 

    } 

  }
 

Output:  

Error:  No implicit Ordering is defined for Any.      println("Sorted(ASC) order: " + ve2.sorted)  Important point: Index = length -1   Index always start from 0 to ...  values of value ve2 :Vector(23, 24, 25, 26, 27, 28, 29, 30, 23, 24, 25, 26, 27, 28, 29, 30, (3,4))  sorted is not working here because sorted it not able to read out last element (3,4)  Solution how it can work the below program are given below   Example:  package Collection   
class VectorExample { 

    val ve = Vector(23,24,25,26,27,28,29,30) 

    val ve1 = ve:+3 

  val ve2 = ve++ve1 

    println("values of value ve2 :" +ve2) 

  def ve_fun()= { 

    println("Size of ve2 :" + ve2.size) 

    println("First values of ve2 :" + ve2.head) 

    println("Reverse elements of ve2 : " +ve2.reverse) 

    println("Sorted(ASC) order : " + ve2.sorted) 

    } 

    println(ve) 

} 

  object VecE { 

    def main(args: Array[String]): Unit = { 

      new VectorExample().ve_fun() 

    } 

 }
   

Output:  

values of value ve2 :Vector(23, 24, 25, 26, 27, 28, 29, 30, 23, 24, 25, 26, 27, 28, 29, 30, 3)  Vector(23, 24, 25, 26, 27, 28, 29, 30)  Size of ve2 :17  First values of ve2 :23  Reverse elements of ve2 : Vector(3, 30, 29, 28, 27, 26, 25, 24, 23, 30, 29, 28, 27, 26, 25, 24, 23)  Sorted(ASC) order : Vector(3, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30)    Process finished with exit code 0  Explanation: we can see that the sorted work.  Queue:  When we talk about data management FIFO (first in first out) and LIFO (last in last out) is important.   FIFO: queue   LIFO: stack   queue by default FIFO and it's immutable.   It is immutable as well as mutable. But by default it is immutable. Using the queue, we have to import a package of import scala.collection.immutable.Queue  Example:   package Collection   
import scala.collection.immutable.Queue 

object QueueExample { 

  def main(args: Array[String]) = { 

    val queue = Queue(23, 4, 5, 6, 7, 8, 8) 

    println("value of queue : " + queue) 

    println("first element of queue :" + queue(1)) 

  } 

}
  Output   value of queue : Queue(23, 4, 5, 6, 7, 8, 8)  first element of queue :4    Process finished with exit code 0   

There are two methods to call queue  

  • dequeue method  
  • enqueue  method 
 dequeue method: to delete the elements   enqueue method: it is for addition of elements   How dequeue work:  It follows FIFO order   suppose :(23, 4, 5, 6, 7, 8, 8)  After dequeue: (23, Queue(4, 5, 6, 7, 8, 8))  Again applying dequeue :(4, Queue(5, 6, 7, 8,8))  Example  package Collection   
import scala.collection.immutable.Queue 

object QueueExample { 

  def main(args: Array[String]) = { 

    var queue = Queue(23, 4, 5, 6, 7, 8, 8) 

    println("value of queue : " + queue) 

    println("first element of queue :" + queue(1)) 

    val que1 = queue.enqueue(4) 

    que1.foreach(ele => println("After enqueue : " + ele)) //print for que1 

    val que2 = queue.dequeue    //It's an inside object so does not need to create instantiate 

    println("After dequeue : " + que2) 

  } 

}
 

Output:  

value of queue : Queue(23, 4, 5, 6, 7, 8, 8)  first element of queue :4    Process finished with exit code 0  Stream:  "streaming" means something is moving.  means its ongoing business. It’s not historical that somebody is a store there. it's just like a water  stream is a new concept in Scala it is not anywhere in java or python.  to work with a stream, we need to know the concept of laziness.  stream collection is implemented with lazy.  suppose in scala val a = 1 to 10   when we assign a is val then it occupies the RAM. Out of RAM, some space is occupied by variables. at one point in time, RAM gets full and it's not managing well throwing an exception. It’s a wide issue since computer designed a computer. Then we have to know the algorithm. 

lazy concept: 

lazy is a keyword it only works with val .  #lazy val x = 1 to 1000  it does not take any memory.  suppose before assignment of lazy it takes some space 8GB RAM   after assignment does not take any space so it 0% utilization of CPU.  streaming is work like lazy  Question: What is the difference between function and method?  Answer:  Method is the system has defined for you.  function means that we create   package Collection     
object StreamExample { 

  def main(args:Array[String])={ 

    val str = (1 to 20 ).toStream 

    println(str) 

    println(str(5)) 

  } 

}
  Output:   Stream(1, <not computed>)  6    Process finished with exit code 0  Why streaming  Why streaming is called because control is in our hands. Because when we watch videos on Netflix, Amazon. Which video we want to buffer your memory will work based on that or your charges will start based on that if it's not a monthly subscription.  So, streaming means always real-time whenever we say anything is streaming we will deal real-time data with a streaming business we cannot say 100% real-time because nothing is a hundred % we can say 80% real-time data. 

How to create random values  

Suppose we have random values. it always works with range.  when we want to use random values we have to use the below syntax  val str = 10 #:: 20 #:: 25 #:: Stream.empty  Example:  package Collection     
object StreamExample { 

  def main(args:Array[String])={ 

    val str = 10 #:: 20 #:: 25 #:: Stream.empty 

    println(str) 

  } 

}
  Output:  Stream(10, <not computed>)    Process finished with exit code 0    tuple: 
  • tuple support immutable  
  • tuple is a mixed element 
Tuple does not have any name. As array has a name ar.  It does not support the index.  then how we can access the elements.  using (._1) .it will access the first element.  if we want to access all the elements one by one there is a function called .productIterator  Example:  Benefits of Using Vector in Scala package Collection    object TupleExample {    def main(args: Array[String]): Unit = {         
val tup = (1, 1, "hey", 1.9, 20) 

    println("all are the tuple elements :" + tup) 

    println("first element of the tuple :" +tup._1) 

    tup.productIterator.foreach(println) // .productIterator method to use to access one by one elements 

  } 

}
  Output: Benefits of Using Vector in Scala all are the tuple elements :(1,1,hey,1.9,20)  first element of the tuple :1  1  1  hey  1.9  20    Process finished with exit code 0  Note:    try and exception try and catch block these are important for any programming language because when writing a code in production to write using try and catch method. spark is not a language it's an API    Benefits of Using Vector in Scala        

Quick Support

image image