Functional Programming in Java 8+ using the Stream API with Example

09 Dec, 2021
API is an acronym for Application Programming Interface, which is software and the java streams work on a data source. Consider a stream like a flow of water in a small canal. Let’s take a real-life example. Each time a user uses an application that is popular these days like WhatsApp in order to communicate via delivering text messages or calls to other users. Both users are using an API.
Java streams work on three operations which as mentioned below 
Data SourceIntermediate operationTerminal operation
Data Source
Intermediate operation
Terminal operation
Methods: Streams can be created in three ways
Using an object of any class from the collection frameworkUsing an array of the reference data typeUsing the interface defined in the ‘java.util.stream’ package
Using an object of any class from the collection framework
Using an array of the reference data type
Using the interface defined in the ‘java.util.stream’ package
Method 1: Data Source 
The data source can be widely varied such as an array, List, etc 
Syntax: 
ArrayList<Integer> numbers = new ArrayList<>();
Integer[] numbers = {1,2,3};
Example 1: Using an object as a data source
Java
// Java Program showcasing data source// using an object as a data source // Importing input output classesimport java.io.*; // Classclass GFG {     // Main driver method    public static void main(String[] args)    {        // Data Source         // Creating an arrayList object        // Declaring object of String type        ArrayList<String> gfgNames = new ArrayList<>();         // Custom input elements to above object        gfgNames.add("Dean");        gfgNames.add("castee");        gfgNames.add("robert");         // Creating object of Stream where Stream is created        // using arrayList and object as data source        Stream<String> streamOfNames = gfgNames.stream();         // Print and display element        System.out.print(streamOfNames);    }}
 Example 2: Using an array as a data source
// Data Source
Integer[] numbers = {1,2,3,4,5};
// Stream using an array
Stream<Integer> streamOfNumbers = Arrays.stream(numbers);
// using predefined Instream interface
integerStream = IntStream.range(1,100); // a stream from 1 to 99;
Java
// Java Program showcasing data source// using an array as a data source // Importing java input output classimport java.io.*; // Importing all classes from// java.util packageimport java.util.*; // Importing class for additional operations,// additionls and pipelinesimport java.util.stream.IntStream; // Classclass GFG {     // Main driver method    public static void main(String[] args)    {        // Creating a predefined stream using range method        // Custom inputs for range as parameters        var stream = IntStream.range(1, 100);         // Stream is created        var max = stream.filter(number -> number % 4 == 0)                      .count();         // Print and display the maximum number        // from the stream        System.out.println(max);    }}
24
Method 2: Intermediate Operation
Intermediate operations are some methods that one can apply on a stream. 
Note: It can be of any number
filter()
Example:
Java
import java.io.*; class GFG {    public static void main(String[] args)    {        // Data Source        Integer[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }         // Stream        Stream<Integer> streamOfNumbers            = Arrays.stream(numbers);         // filter all the even numbers        Stream<Integer> evenNumbersStream            = streamOfNumbers.filter(                number -> number % 2 == 0)    }}
 Method 3: Terminal operation
Terminal operation methods that we can apply on a stream that will cause a stream to be “closed”.
Concept: 
Some terminal operations can be used to iterate on the elements of the stream.
min(),max(),count()
forEach(),noneMatch()
Example 1: Explaining stream API
Java
// Importing input output classesimport java.io.*;// Importing all classes from// java.util packageimport java.util.*; // Classclass GFG {     // Main driver method    public static void main(String[] args)    {        // Data source        // Custom integer inputs        Integer[] numbers            = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };         // Stream        var streamOfNumbers = Arrays.stream(numbers);         // Using filter method        var evenNumbersStream            = streamOfNumbers                  .filter(number -> number % 3 == 0)                  .count();         // Print and display        System.out.println(evenNumbersStream);    }}
4
Example 2:
Java
// Importing all classes from java.util packageimport java.io.*;import java.util.*; // Classclass GFG {   // Main driver method    public static void main(String[] args)    {      // Creating an ArrayList of Integer type        ArrayList<Integer> list = new ArrayList<>();             // Adding elements to above object of Arraylist      // Custom inputs        list.add(20);        list.add(4);        list.add(76);        list.add(21);        list.add(3);        list.add(80);         var stream = list.stream();         var numbers            = stream.filter(number -> number % 2 == 0)                  .filter(number -> number > 20);             // Print all the elements of the stream on the console        numbers.forEach(System.out::println);    }}
76
80
Note: One can pass lambda also number -> System.out.println(number + ” “)
gulshankumarar231
kevinm2052
sagartomar9927
rajeev0719singh
rizwanakhatoon
Java 8
Java-Functional Programming
java-stream
Technical Scripter 2020
Java
Technical Scripter
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stream In Java
Introduction to Java
Constructors in Java
Exceptions in Java
Generics in Java
Functional Interfaces in Java
Java Programming Examples
Strings in Java
Differences between JDK, JRE and JVM
Abstraction in Java