Die Stream Reduce-Operation in Java

Mohammad Irfan 12 Oktober 2023
  1. Was ist Reduktion in Java
  2. Stream reduce()-Operation in Java 8
  3. Finden der Summe mit der Operation reduce() in Java
  4. Finden der Summe mit reduce() und Methodenreferenz in Java
  5. Ermitteln von Min und Max mit der Operation reduce() in Java
  6. Fazit
Die Stream Reduce-Operation in Java

In diesem Tutorial werden die Einzelheiten der Operation reduce() und einige ihrer Beispiele erläutert. Bevor wir die Operation reduce() besprechen. Lassen Sie uns zuerst die Reduktion besprechen.

Was ist Reduktion in Java

Viele Terminaloperationen (wie Durchschnitt, Summe, Min, Max und Anzahl) im JDK kombinieren den Inhalt eines Streams, um einen einzelnen Wert auszugeben. Die Reduktionsoperation tut dasselbe und gibt einen einzelnen Stream zurück.

Darüber hinaus enthält das JDK Reduktionsoperationen, die eine Sammlung statt eines einzelnen Werts zurückgeben. Viele Reduktionsprozesse erfüllen eine bestimmte Aufgabe, z. B. das Berechnen des Durchschnitts von Werten oder das Kategorisieren von Elementen.

Das JDK hingegen verfügt über allgemeine Reduktionsoperationen, die als Reduzieren und Sammeln bekannt sind.

Stream reduce()-Operation in Java 8

Die Operation reduce() ist eine Allzweck-Reduktionsoperation. Die Syntax der Operation reduce() lautet:

T reduce(T identity, BinaryOperator<T> accumulator)

Es gibt zwei Argumente für die Reduktionsoperation:

  • identity: Das Element identity ist sowohl der Anfangswert der Reduktion als auch das Standardergebnis, wenn der Stream keine Elemente enthält.
  • accumulator: Die Funktion accumulator akzeptiert zwei Argumente: ein Teilreduktionsergebnis und das nächste Element des Streams. Sie liefert uns ein neues Teilergebnis.

Die Operation reduce() ist eine Art Terminaloperation.

Finden der Summe mit der Operation reduce() in Java

Berechnen wir die Summe aller Elemente eines Arrays mithilfe der Stream-API in Java. Sehen Sie sich den folgenden Code an:

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);
  }
}

Ausgabe:

sum: 2422

Wenn wir die Funktion reduce() nicht verwenden, müssen wir den folgenden Code schreiben, um die Summe aller Elemente zu erhalten. Siehe das Beispiel unten.

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);
  }
}

Ausgabe:

sum : 2422

Finden der Summe mit reduce() und Methodenreferenz in Java

Wir können auch die sum()-Methodenreferenz Integer::sum wie folgt übergeben, um die Summe aller Elemente zu erhalten. Sehen Sie sich den folgenden Code an:

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);
  }
}

Ausgabe:

sum: 2422

Wenn das Array leer ist und wir es übergeben, um die Summe der Elemente zu erhalten, löst es keine Ausnahme aus, sondern gibt ein Nullergebnis zurück. Siehe das Beispiel unten.

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);
  }
}

Ausgabe:

sum: 0

Wie wir sehen können, wird das Identitätselement zurückgegeben, wenn das Array leer ist.

Ermitteln von Min und Max mit der Operation reduce() in Java

Um das Min- und Max-Element in einem Array zu finden, verwenden wir im Allgemeinen eine Kombination aus for-Schleifen und if-else-Anweisungen wie:

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);
  }
}

Ausgabe:

max: 985
min: 20

Wir können das min- und max-Element in einem Array mit der Operation reduce() finden, die unseren Code prägnanter macht. Siehe das Beispiel unten.

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);
  }
}

Ausgabe:

max: 985
min: 20

Wir können auch Methodenreferenzen für die Berechnung des min- und max-Elements aus einem Array verwenden. Sehen Sie sich den folgenden Code an:

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);
  }
}

Ausgabe:

max: 985
min: 20

Fazit

In diesem Tutorial haben wir etwas über die Reduktionsoperation gelernt. Anschließend tauchten wir tief in das Thema der Operation reduce() ein. Schließlich haben wir mehrere Beispiele dafür gesehen, wie wir grundlegende arithmetische Funktionen prägnant ausführen.

Verwandter Artikel - Java Stream