La operación de reducción de Stream en Java

Mohammad Irfan 12 octubre 2023
  1. ¿Qué es la reducción en Java?
  2. Transmisión de la operación reduce() en Java 8
  3. Encontrar la suma usando la operación reduce() en Java
  4. Encontrar la suma usando reduce() y la referencia del método en Java
  5. Encontrar Min y Max usando la operación reduce() en Java
  6. Conclusión
La operación de reducción de Stream en Java

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 elemento identity es tanto el valor inicial de la reducción como el resultado predeterminado si la ruta no contiene elementos.
  • accumulator: La función accumulator 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.

Artículo relacionado - Java Stream