La operación de reducción de Stream en Java
- ¿Qué es la reducción en Java?
-
Transmisión de la operación
reduce()
en Java 8 -
Encontrar la suma usando la operación
reduce()
en Java -
Encontrar la suma usando
reduce()
y la referencia del método en Java -
Encontrar Min y Max usando la operación
reduce()
en Java - Conclusión
Este tutorial discutirá los detalles de la operación reduce()
y discutirá algunos de sus ejemplos. Antes de discutir la operación reduce()
. Analicemos primero la reducción.
¿Qué es la reducción en Java?
Muchas operaciones de terminal (como promedio, suma, mínimo, máximo y conteo) en el JDK combinan el contenido de un Stream para generar un solo valor. La operación de reducción hace lo mismo y devuelve un Stream único.
Además, el JDK incluye operaciones de reducción que devuelven una colección en lugar de un único valor. Muchos procesos de reducción realizan un trabajo específico, como calcular el promedio de valores o categorizar elementos.
El JDK, por otro lado, tiene operaciones de reducción de propósito general conocidas como reducción y recolección.
Transmisión de la operación reduce()
en Java 8
La operación reduce()
es una operación de reducción de propósito general. La sintaxis de la operación reduce()
es:
T reduce(T identity, BinaryOperator<T> accumulator)
Hay dos argumentos para la operación de reducción:
identity
: el elementoidentity
es tanto el valor inicial de la reducción como el resultado predeterminado si la ruta no contiene elementos.accumulator
: La funciónaccumulator
acepta dos argumentos: un resultado de reducción parcial y el siguiente elemento del Stream. Nos da un nuevo resultado parcial.
La operación reduce()
es un tipo de operación de terminal.
Encontrar la suma usando la operación reduce()
en Java
Calculemos la suma de todos los elementos de un array usando Stream API en Java. Mira el código a continuación:
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
int sum = Arrays.stream(numbers).reduce(0, (a, b) -> a + b);
System.out.print("sum: " + sum);
}
}
Producción :
sum: 2422
Si no usamos la función reduce()
, tendremos que escribir el código de abajo para obtener la suma de todos los elementos. Vea el ejemplo a continuación.
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
int sum = 0;
for (int i : numbers) {
sum += i;
}
System.out.println("sum : " + sum);
}
}
Producción :
sum : 2422
Encontrar la suma usando reduce()
y la referencia del método en Java
También podemos pasar la referencia del método sum()
Integer::sum
de la siguiente manera para obtener la suma de todos los elementos. Mira el código a continuación:
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
int sum = Arrays.stream(numbers).reduce(0, Integer::sum);
System.out.print("sum: " + sum);
}
}
Producción :
sum: 2422
Si el array está vacía y la pasamos para obtener la suma de los elementos, entonces no arroja ninguna excepción, sino que da un resultado de cero. Vea el ejemplo a continuación.
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {};
int sum = Arrays.stream(numbers).reduce(0, Integer::sum);
System.out.print("sum: " + sum);
}
}
Producción :
sum: 0
Como podemos ver, el elemento de identidad se devuelve si el array está vacía.
Encontrar Min y Max usando la operación reduce()
en Java
Generalmente, para encontrar el elemento mínimo y máximo en un array, usamos una combinación de bucles for
y declaraciones if-else
como:
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
// finding the min element
int min = numbers[0];
for (int i : numbers) {
if (min > i) {
min = i;
}
}
// finding the max element
int max = numbers[0];
for (int i : numbers) {
if (max < i) {
max = i;
}
}
// printing the max and min value
System.out.println("max: " + max);
System.out.println("min: " + min);
}
}
Producción :
max: 985
min: 20
Podemos encontrar el elemento mínimo y máximo en un array usando la operación reduce()
que hace que nuestro código sea más conciso. Vea el ejemplo a continuación.
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
// finding the min element
int min = Arrays.stream(numbers).reduce(Integer.MAX_VALUE, (a, b) -> a < b ? a : b);
// finding the max element
int max = Arrays.stream(numbers).reduce(Integer.MIN_VALUE, (a, b) -> a > b ? a : b);
// printing the max and min value
System.out.println("max: " + max);
System.out.println("min: " + min);
}
}
Producción :
max: 985
min: 20
También podemos usar referencias de métodos para el cálculo del elemento mínimo y máximo de un array. Mira el código a continuación:
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
// finding the min element
int min = Arrays.stream(numbers).reduce(Integer.MAX_VALUE, Integer::min);
// finding the max element
int max = Arrays.stream(numbers).reduce(Integer.MIN_VALUE, Integer::max);
// printing the max and min value
System.out.println("max: " + max);
System.out.println("min: " + min);
}
}
Producción :
max: 985
min: 20
Conclusión
En este tutorial, aprendimos sobre la operación de reducción. Luego profundizamos en el tema de la operación reduce()
. Por último, vimos varios ejemplos de cómo realizamos funciones aritméticas básicas de manera concisa.