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.
- comoDoubleStream()
- asLongStream()
- CualquierCoincidencia()
- todas las coincidencias()
- 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.
- promedio()
- encontrar cualquier()
- encontrarPrimero()
- máx()
- min()
- 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 } }
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