Secuencias en arreglos en Java 8

En este artículo, revisaremos el método de flujo de la clase Arrays que se agrega en Java 8, simplifica muchas operaciones en los arreglos y también ha mejorado la eficiencia. 
La adición de diferentes características como lambdas y flujos en Java 8 ha hecho que Java sea eficiente para escribir código elegante que ha mejorado la legibilidad proporcionando un aumento en la eficiencia del rendimiento en la mayoría de los casos.

Sintaxis: 

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

Variaciones: 

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)

Requisito previo:- 

Nota: – Incluso si no está familiarizado con estos temas, puede leer el artículo, ya que usa una expresión lambda muy básica y explica cómo usar el método de la clase de transmisión. 

Veamos un ejemplo de streams en Arrays. En este ejemplo, encontraremos el promedio sobre los elementos de la array y veremos la diferencia en la forma de escribir código en estilos imperativo y declarativo. 

Ejemplo 1: 

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 };
 
        // Let's try the imperative style first(which we
        // are familiar with)
        int sum = 0;
        for (int i = 0; i < arr.length; i++)
            sum += arr[i];
        System.out.println("Average using iteration :" +
                                    (sum / arr.length));
 
        // Let's try the declarative style now
        sum = Arrays.stream(arr) // Step 1
                  .sum(); // Step 2
        System.out.println("Average using streams : " +
                                   (sum / arr.length));
 
        // forEach()
        // It iterates through the entire streams
        System.out.println("Printing array elements : ");
        Arrays.stream(arr)
            .forEach(e->System.out.print(e + " "));
    }
}

Producción: 

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

En el ejemplo anterior, ha visto que la transmisión funciona. Veamos qué hace este paso. 

Paso 1: 
Arrays.stream(arr) – En este paso llamamos al método stream en la clase Arrays pasando arr como parámetro a la función que esta declaración devuelve IntStream

Paso 2: 
Arrays.stream(arr).sum() – Una vez que obtengamos el IntStream podemos usar diferentes métodos de la interfaz IntStream. 
Mientras pasas por IntStream . documentación de la interfaz, puede abrir cada método para ver si realiza una operación de terminal o una operación intermedia. Y deberíamos usar este método en consecuencia, ya sea en la terminal o en el medio. 
Ahora veamos diferentes métodos de IntStream y veamos qué operaciones realizan estos métodos. Veremos ejemplos de todos estos métodos en contraste con una array. 

Pasaremos por los siguientes métodos en el siguiente ejemplo.  

  1. comoDoubleStream()
  2. asLongStream()
  3. CualquierCoincidencia()
  4. todas las coincidencias()
  5. ningunaCoincidencia()

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 };
 
        // asDoubleStream()
        // It converts the original array to double
        System.out.println("Example of asDoubleStream(): ");
        Arrays.stream(arr_sample1)
            .asDoubleStream()
            .forEach(e->System.out.print(e + " "));
 
        // asLongStream()
        // It converts the original array to Long
        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 };
 
        // anyMatch()
        // This method find whether the given predicate
        // is in the array or not
        System.out.println("\nExample of anyMatch");
 
        // Test whether any of the element in array is
        // divisible by 11 or not
        IntPredicate predicate = e->e % 11 == 0;
        System.out.println(Arrays.stream(arr_sample2)
                               .anyMatch(predicate));
 
        // You can directly write the lambda expression
        // which computes to IntPredicate
        // Uncomment to test
        // System.out.println(Arrays.stream(arr)
        // .anyMatch(e -> e % 11 == 0));
 
        int arr_sample3[] = { 2, 4, 6, 8, 10 };
        int arr_sample4[] = { 1, 3, 5, 7, 11 };
 
        // allMatch()
        // This method finds whether the given predicate
        // matches the entire array or not
        System.out.println("Example of allMatch :");
 
        // Returns true as all the elements of arr_sample3
        // is even
        System.out.println(Arrays.stream(arr_sample3)
                               .allMatch(e->e % 2 == 0));
 
        // Returns false as all the elements of arr_sammple4
        // is odd
        System.out.println(Arrays.stream(arr_sample4)
                               .allMatch(e->e % 2 == 0));
 
        // noneMatch()
        System.out.println("Example of noneMatch");
        System.out.println(Arrays.stream(arr_sample4)
                               .noneMatch(e->e % 2 == 0));
    }
}

Producción: 

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

Hemos visto muy pocos métodos, aunque IntStream proporciona muchos más, intentemos algunos más. 
Pasaremos por los siguientes métodos en el siguiente ejemplo.  

  1. promedio()
  2. encontrar cualquier()
  3. encontrarPrimero()
  4. máx()
  5. min()
  6. reduce()

Recuerde que todo este método devuelve OptionalInt u OptionalDouble en lugar de int o 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");
 
        // average()
        // This method returns a average of an array
        System.out.println("Example of average() : ");
        System.out.println((Arrays.stream(arr_sample1)
                                .average()));
 
        // findAny()
        // It can return any value from the stream
        // Most of the time it returns the first value
        // but it is not assured it can return any value
        System.out.println("Example of findAny() : ");
        System.out.println(Arrays.stream(arr_sample1)
                               .findAny());
 
        // findFirst()
        // It returns the first element of the stream
        System.out.println("Example of findFirst() :");
        System.out.println(Arrays.stream(arr_sample1)
                               .findFirst());
 
        // max()
        // It returns the max element in an array
        System.out.println("Example of max() :");
        System.out.println(Arrays.stream(arr_sample1)
                               .max());
 
        // min()
        // It returns the max element in an array
        System.out.println("Example of max() :");
        System.out.println(Arrays.stream(arr_sample1)
                               .min());
 
        // reduce()
        // It reduces the array by certain operation
        // Here it performs addition of array elements
        System.out.println("Example of reduce() :");
        System.out.println(Arrays.stream(arr_sample1)
                               .reduce((x, y)->x + y));
 
        // reduce() have another variation which we will
        // see in different example
    }
}
Producción

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 max() :
OptionalInt[2]
Example of reduce() :
OptionalInt[348]

Pero se vuelve realmente difícil trabajar con este OptionalInt y OptionalDouble, por lo tanto, Java proporciona un método para convertirlos en valores double e int de modo que se puedan reutilizar fácilmente. 

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");
 
        // OptionalDouble can be converted to double by using getAsDouble()
        // if average doesn't contains any value it throws NoSuchElementException
        System.out.println("Example of average() : ");
        System.out.println((Arrays.stream(arr_sample1)
                                .average()
                                .getAsDouble()));
 
        // OptionalInt can be converted to int by using getAsInt()
        System.out.println("Example of findAny() : ");
        System.out.println(Arrays.stream(arr_sample1)
                               .findAny()
                               .getAsInt());
    }
}

Producción: 

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

Hay algunos métodos más proporcionados por IntStream que analizaremos en diferentes artículos y estarían trabajando con diferentes variaciones del método de transmisión.

Referencia:  
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

Este artículo es una contribución de Sumit Ghosh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *