Java 8 Streams Tutorial

A stream is a sequence of objects that supports various methods which can be pipelined to produce the desired result.



features of java streams


  • A stream is not a data structure instead it takes input from the Collections, Arrays or I/O
  • Streams don’t change the original data structure, they only provide the result as per the pipelined methods.
  • Each intermediate operation is lazily executed and returns a stream as a result, hence various intermediate operations can be pipelined. Terminal operations mark the end of the stream and return the result.

Different operations on streams


  • Intermediate operations
  • Terminal operations

Intermediate operations


Following are the intermediate operations

map(): The map method is used to returns a stream consisting of the results of applying the given function to the elements of this stream.

List number = Arrays.asList(1,2,3,4);
List square = number.stream().map(x->x*x).collect(Collectors.toList());

Check out the complete tutorial on map()

filter(): The filter method is used to select elements as per the Predicate passed as argument

List names = Arrays.asList("HP", "Dell", "Macbook", "Acer", "Lenova");
List result = names.stream().filter(s->s.startsWith("M")).collect(Collectors.toList());

Check out the complete tutorial on filter()

sorted(): The sorted method is used to sort the stream

List names = Arrays.asList("HP", "Dell", "Macbook", "Acer", "Lenova");
List result = names.stream().sorted().collect(Collectors.toList());

Check out the complete tutorial on sorted()

Terminal operations


collect(): The collect method is used to return the result of the intermediate operations performed on the stream.

List number = Arrays.asList(1,2,3,4,5);
Set square = number.stream().map(x->x*x).collect(Collectors.toSet());

Checkout the complete tutorial on collect() method here

forEach(): The forEach method is used to iterate through every element of the stream

List number = Arrays.asList(1,2,3,4);
number.stream().map(x->x*x).forEach(System.out::println);

reduce(): The reduce method is used to reduce the elements of a stream to a single value. The reduce method takes a BinarayOperator as a parameter

List number = Arrays.asList(1,2,3,4);
int even = number.stream().filter(x->x%2 == 0).reduce(0,(ans, i)->ans+i);

Check out the complete tutorial on reduce()