Home »
Scala
Streams in Scala
Scala | Streams: In this tutorial on streams in Scala, we will learn about streams in Scala which are special types of lists. Here, we will learn about them in detail with examples.
Submitted by Shivang Yadav, on April 10, 2020
Scala | Streams
Stream in Scala is a type of lazy val. It is a lazy val whose elements are evaluated only when they are used in the program. Lazy initialization is a feature of Scala that increases the performance of the program.
Syntax:
val str = 1 #:: 2 #:: 3 #:: Stream.empty
Elements of a stream are created using #:: operator using Stream.empty at the end of initialization.
Program to show the creation of a stream
object myObject
{
def main(args:Array[String])
{
val myStream = 2 #:: 4 #:: 6 #:: Stream.empty;
println("New Stream created...")
println(myStream)
}
}
Output
New Stream created...
Stream(2, <not computed>)
Creating stream using stream.cons
You can create a stream using stream.cons. It will create an immutable stream and needs an import statement Scala.collection.immutable.Stream.cons.
import scala.collection.immutable.Stream.cons
object myObject
{
def main(args:Array[String])
{
val myStream: Stream[Int] = cons(2, cons(4, cons(6, Stream.empty)))
println("New Stream created...")
println(myStream)
}
}
Output
New Stream created...
Stream(2, <not computed>)
Accessing elements of the stream
In streams, take method is used to take/access elements.
Program to access elements using take method
import scala.collection.immutable.Stream.cons
object myObject
{
def main(args:Array[String])
{
val myStream: Stream[Int] = cons(2, cons(4, cons(6, cons(9, Stream.empty))))
print("Accessing Stream : ")
print(myStream)
print("\nTake first 2 elements of stream : ")
myStream.take(2).print
print("\nTake all elements from stream : ")
myStream.take(5).print
}
}
Output
Accessing Stream : Stream(2, <not computed>)
Take first 2 elements of stream : 2, 4
Take all elements from stream : 2, 4, 6, 9
Creating an empty Stream
You can create an empty stream in Scala using Stream.empty.
object myObject
{
def main(args:Array[String])
{
val myStream: Stream[Int] = Stream.empty[Int]
print("This is an empty Stream : ")
println(myStream)
}
}
Output
This is an empty Stream : Stream()