Streams on Arrays in Java 8 – GeeksforGeeks

In this article, we would be going through stream method of Arrays class which is added in Java 8, it simplifies many operations on arrays as well have improved the efficiency. 
Addition of different features like lambdas and streams in java 8 have made java efficient to write elegant code which have improve the readability providing increase in efficiency of performance in most case.

Syntax : 

public static IntStream stream(int[] arr)
Parameter :
arr - An array which is to be converted to the stream
Returns :
An IntStream of an array

Variations : 

public static IntStream stream(int[] array)
public static IntStream stream(int[] array, int startInclusive, int endExclusive)
public static DoubleStream stream(double[] array)
public static DoubleStream stream(double[] array, int startInclusive, int endExclusive)
public static LongStream stream(long[] array)
public static LongStream stream(long[] array, int startInclusive, int endExclusive)
public static  Stream stream(T[] array)
public static  Stream stream(T[] array, int startInclusive, int endExclusive)

Prerequisite:- 

Note: – Even if you are not familiar with these topics, you can go through the article as it uses very basic lambda expression and explains how to use method of stream class. 

Let’s see an example of streams on Arrays. In this example, we will be finding average over the array elements and will see the difference in way of writing code in imperative and declarative styles 

Example 1: 

Tóm Tắt

Java




import java.util.Arrays;

class GFG_Demo_1 {

    public static void main(String[] args)

    {

        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

            11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

  

        

        

        int sum = 0;

        for (int i = 0; i < arr.length; i++)

            sum += arr[i];

        System.out.println("Average using iteration :" +

                                    (sum / arr.length));

  

        

        sum = Arrays.stream(arr)

                  .sum();

        System.out.println("Average using streams : " +

                                   (sum / arr.length));

  

        

        

        System.out.println("Printing array elements : ");

        Arrays.stream(arr)

            .forEach(e->System.out.print(e + " "));

    }

}



Output: 

Average using iteration :10
Average using streams : 10
Printing array elements :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

In the above example you have seen stream working let’s see what these step does. 

Step 1: 
Arrays.stream(arr) – In this step we call the stream method on the Arrays class passing arr as the parameter to the function this statement returns IntStream. 

Step 2: 
Arrays.stream(arr).sum() – Once we get the IntStream we can use different methods of the IntStream interface. 
While you go through IntStream. interface documentation you can open each method to see whether it’s perform a terminal operation or intermediate operation. And we should use this method accordingly either at the terminal or in between. 
Now let’s go through different methods of IntStream and see what operations this methods perform.We will see example of all this methods in contrast of an array.. 

We will going through the following methods in the example below.  

  1. asDoubleStream()
  2. asLongStream()
  3. anyMatch()
  4. allMatch()
  5. noneMatch()

Java




import java.util.Arrays;

import java.util.function.IntPredicate;

class GFG_Demo_2 {

  public static void main(String[] args)

  {

        int arr_sample1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

                 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

  

        

        

        System.out.println("Example of asDoubleStream(): ");

        Arrays.stream(arr_sample1)

            .asDoubleStream()

            .forEach(e->System.out.print(e + " "));

  

        

        

        System.out.println("\nExample of asLongStream");

        Arrays.stream(arr_sample1)

            .asLongStream()

            .forEach(e->System.out.print(e + " "));

  

        int arr_sample2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,

            10, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

  

        

        

        

        System.out.println("\nExample of anyMatch");

  

        

        

        IntPredicate predicate = e->e % 11 == 0;

        System.out.println(Arrays.stream(arr_sample2)

                               .anyMatch(predicate));

  

        

        

        

        

        

  

        int arr_sample3[] = { 2, 4, 6, 8, 10 };

        int arr_sample4[] = { 1, 3, 5, 7, 11 };

  

        

        

        

        System.out.println("Example of allMatch :");

  

        

        

        System.out.println(Arrays.stream(arr_sample3)

                               .allMatch(e->e % 2 == 0));

  

        

        

        System.out.println(Arrays.stream(arr_sample4)

                               .allMatch(e->e % 2 == 0));

  

        

        System.out.println("Example of noneMatch");

        System.out.println(Arrays.stream(arr_sample4)

                               .noneMatch(e->e % 2 == 0));

    }

}



Output: 

Example of asDoubleStream():
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0
14.0 15.0 16.0 17.0 18.0 19.0 20.0
Example of asLongStream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Example of anyMatch
false
Example of allMatch :
true
false
Example of noneMatch
true

We have seen very few methods though IntStream provides many more, lets try some more. 
We will going through the following methods in the example below.  

  1. average()
  2. findAny()
  3. findFirst()
  4. max()
  5. min()
  6. reduce()

Remember all this method returns OptionalInt or OptionalDouble instead of int or double. 

Java




import java.util.Arrays;

class GFG_Demo_3 {

    public static void main(String[] args)

    {

        int arr_sample1[] = { 11, 2, 3, 42, 5, 6, 17, 8, 9

               10, 11, 12, 13, 24, 55, 16, 47, 18, 19, 20 };

        System.out.println("These method returns Optional");

  

        

        

        System.out.println("Example of average() : ");

        System.out.println((Arrays.stream(arr_sample1)

                                .average()));

  

        

        

        

        

        System.out.println("Example of findAny() : ");

        System.out.println(Arrays.stream(arr_sample1)

                               .findAny());

  

        

        

        System.out.println("Example of findFirst() :");

        System.out.println(Arrays.stream(arr_sample1)

                               .findFirst());

  

        

        

        System.out.println("Example of max() :");

        System.out.println(Arrays.stream(arr_sample1)

                               .max());

  

        

        

        System.out.println("Example of min() :");

        System.out.println(Arrays.stream(arr_sample1)

                               .min());

  

        

        

        

        System.out.println("Example of reduce() :");

        System.out.println(Arrays.stream(arr_sample1)

                               .reduce((x, y)->x + y));

  

        

        

    }

}



Output

These method returns Optional
Example of average() : 
OptionalDouble[17.4]
Example of findAny() : 
OptionalInt[11]
Example of findFirst() :
OptionalInt[11]
Example of max() :
OptionalInt[55]
Example of min() :
OptionalInt[2]
Example of reduce() :
OptionalInt[348]

But it becomes really difficult to work with this OptionalInt and OptionalDouble, hence Java provides method to convert them into double and int values such that it can be easily reused 

Java




import java.util.Arrays;

class GFG_Demo_4 {

public static void main(String[] args)

    {

        int arr_sample1[] = { 11, 2, 3, 42, 5, 6, 17, 8, 9,

                10, 11, 12, 13, 24, 55, 16, 47, 18, 19, 20 };

        System.out.println("These method convert Optional to primitive");

  

        

        

        System.out.println("Example of average() : ");

        System.out.println((Arrays.stream(arr_sample1)

                                .average()

                                .getAsDouble()));

  

        

        System.out.println("Example of findAny() : ");

        System.out.println(Arrays.stream(arr_sample1)

                               .findAny()

                               .getAsInt());

    }

}



Output: 

These method convert Optional to primitive
Example of average() :
17.4
Example of findAny() :
11

There are some more methods provided by IntStream which we will be going through in different article and would be working with different variations of stream method.

Reference : 
https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html 
https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html

This article is contributed by Sumit Ghosh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to [email protected]. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

My Personal Notes

arrow_drop_up