Java Stream reduzieren

Java Stream reduzieren
Die Java-Stream-API deckt unzählige parallelisierungskompatible Ansätze wie Reduktion und Terminaloperationen ab. Hier untersuchen wir den Reduktionsbetrieb der Java -Stream -Schnittstelle mit der Verringerung () -Methode. Die Methode record () ist ein Prozess, der alle Elemente kombiniert. Die Methode record () verwendet den Binäroperator für alle im Stream angezeigten Elemente. Das erste Argument des Bedieners in diesem Stream muss den Wert der jüngsten Anwendung zurückgeben, und das zweite Argument muss das derzeit im Stream enthaltene Element zurückgeben.

Beispiel 1:

Die Methodenfunktionalität von Stream record () kann leicht mit dem Java -Programm demonstriert werden. Im Folgenden ist die Implementierung des Reduktionsbetriebs mit der Methode Stream record (), um die längere Zeichenfolge zu erhalten.

Java importieren.Util.*;
Klasse streamReduce1
öffentliche statische Leere Main (String [] Args)

Aufführen Strnames = Arrays.ASList ("String1", "String2", "String3",
"String4", "String5");
Optional NewStr = Strnames.Strom().reduzieren (((FirstName, SecondName)->
Vorname.Länge ()> SecondName.Länge()? Vorname Nachname);
Newstr.IfPresent (System.out :: println);

Wir haben eine Listenschnittstelle gegeben, an der wir zuerst das „Strname“ -Objekt deklarieren und dann die Arrays aufrufen.ASList () Methode. Die Arrays.ASLIST () Methode gibt das String -Element in der Form der Liste ein. Anschließend stellen wir die "optionale" Klassenschnittstelle bereit, da die Ergebnisse der Liste die Nullwerte enthalten können. Wir definieren das "NewStr" -Objekt, bei dem die Verrückungs () -Methode nach der Stream () -Klasse auf den "Strnames" bereitgestellt wird. Der Lambda -Ausdruck wird der Vertrag () -Methode bereitgestellt, die die beiden Zeichenfolgewerte eingibt, um die längere Zeichenfolge zu erhalten. Aufgrund der Möglichkeit, dass die Liste, auf der die Reduzierung () ausgeführt wird. Danach verwenden wir die Druckfunktion, um das Ergebnis der Reduzierung der Reduzierung () -Methode zu drucken.

Die längste Zeichenfolge nach dem Reduktionsbetrieb aus dem Betrieb der Stream record () wird innerhalb des Ausgangs abgerufen.

Beispiel 2:

Die Methode der Stream record () kann auch mit dem Java -Akkumulator angewendet werden. Das folgende Quellprogramm verwendet die Methode record () mit dem Akkumulator, um die Elemente zu summieren und ihren Durchschnitt zu finden.

Java importieren.Util.Arrays;
Java importieren.Util.Aufführen;
öffentliche Klasse streamReduce2
public static void main (String [] args)
Aufführen < Integer > NumbersArray = arrays.ASLIST (7, 1, 3, 9, 15);
int arraysum = 0;
für (int i = 0; i < NumbersArray.size(); i++)
Arraysum += numbersArray.bekomme ich);

System.aus.println ("Durchschnitt" + Arraysum / NumbersArray.Größe());

Wir generieren die Liste der numerischen Werte aus der Array -Klasse ASList () -Methode. Die Liste wird in der Variablen "numbersArray" der Listenklasse initialisiert. Dann definieren wir eine andere Variable, die „AVG“ ist, um den Durchschnitt der angegebenen Liste zu bewerten. Wir rufen die Stream recall () -Methode innerhalb der Variablen „AVG“ auf und setzen den Lambda -Ausdruck als Akkumulator innerhalb der Reduzierung () -Methode. Die Methode record () nimmt die „Summe“ und den „CurrValue“ als Eingabe an. Die Elemente des Ganzzahlstreams werden von diesem Akkumulator gespeichert. Nachdem wir die Summe der Stream -List -Elemente erhalten haben, erhalten wir den Durchschnitt, indem wir die Summe des Elements durch die Länge der Größe der Ganzzahlliste teilen.

Der Durchschnitt der angegebenen Liste der Elemente wird unter Verwendung der Reduzierung () -Methode mit dem Akkumulator erhalten.

Beispiel 3:

Die Methode der Stream record () hat eine andere Wrapper -Klasse, in der Min und Max eine davon sind. Die folgende Implementierung des Programms zielt darauf ab, die maximalen Werte aus der angegebenen Sammlung von Elementen zu erhalten.

Java importieren.Util.Anordnungsliste;
Java importieren.Util.Arrays;
Java importieren.Util.Aufführen;
Klasse streamReduce3

öffentliche statische Ganzzahl getmaxValue (Liste Zweifel)

Hähne zweidigische Köderungen zurück.Strom()
.reduzieren (Ganzzahl :: max)
.erhalten();

öffentliche statische Leere Main (String [] Args)

Aufführen Twodigits = Arrays.ASLIST (14, 52, 76, 95, 39, 41);
System.aus.println ("Maximal Element is" + getMaxValue (Twodigits));

Wir konstruieren die GetMaxValue -Funktion in der Java -Klasse. Die Funktion getMaxValue () wird mit dem Parameterobjekt „Twodigits“ versehen. Als nächstes verwenden wir das Return -Keyword in der Funktion getMaxValue (). Wir nennen die Methode recly () mit dem Keyword der Rückgabe zurück. Der Methode record () wird eine Methodenreferenz zugewiesen, der Ganzzahl :: max.

Danach verwenden wir die GET () -Methode nach dem Operation von Reduzierung () Methode, um die erwarteten Ergebnisse zu erhalten. Anschließend haben wir eine Main () -Methode, bei der das "toppelte" Objekt mit der Liste der Ganzzahlelemente initialisiert wird. Außerdem nennen wir die Funktion von GetMaxValue () in der Druckzeile der Java und übergeben das "Twodigit" -Objekt, um den Maximalwert für die Ganzzahlliste zu generieren.

Aus dem vordefinierten maximalen Betrieb der Reduzierung () werden wir den Maximalwert aus der Liste einiger Ganzzahlwerte erhalten.

Beispiel 4:

Es gibt ein weiteres Programm des Reduktionsbetriebs, bei dem alle Zahlen in einem bestimmten Bereich multipliziert werden, um ihre Produkte mithilfe der Reduzierung () -Methode zu erhalten.

Java importieren.Util.*;
Java importieren.Util.Strom.Intstream;
Klasse streamReduce4
öffentliche statische Leere Main (String [] Args)

int numproduct = intstream.Bereich (3, 9)
.Reduzieren ((N1, N2) -> N1 * N2)
.Orelse (-1);
System.aus.println ("Produkt:" + Produkt);

Wir erstellen die Variable „numproduct“, die mit der Intstream Class Range () -Methode festgelegt ist. Die Bereichswerte werden dieser Range () -Methode zugeordnet. Wir verwenden auch die Methode record (), nachdem die Range () -Methode angegeben wurde. Die Verringerung () -Methode wird mit dem Ausdruck definiert, um das Produkt des „n1“ und „n2“ innerhalb des Bereichs im angegebenen Ausnahme des Rechten Elements zu berechnen. Die println () -Methode wird dann verwendet, um das Produkt des Eingangsbereichs zu drucken.

Das Produkt aller Range -Elemente wird mit der Reduktionstechnik erreicht.

Beispiel 5:

Die Vertragsmethode nimmt einen Parameter „Kombinierer“ an, mit dem zwei Werte kombiniert werden. Es muss mit der Funktion des Akkumulators arbeiten. Nur die parallelen Streams können effektiv kombiniert werden, da der Kombiniererparameter die Ausgabe aller Teilstreams für parallele Streams kombiniert.

Java importieren.Util.*;
Klasse streamReduce5
öffentliche statische Leere Main (String [] Args)

String [] arrValues ​​= "Live", "Long", "Life";
Optional Kombination = Arrays.Stream (Arrvalues)
.reduzieren ((S1, S2)-> S1 + "-" + S2);
if (Kombination.ist anwesend())
System.aus.println (Kombination.erhalten());


Wir haben eine Erklärung des String -Array -Objekts, "Arrvalues", und wir initialisieren sie mit den drei Stringelementen. Anschließend erstellen wir das optionale Objekt „Kombinestring“, um die vorherigen Stringelemente zu kombinieren. Dem Objekt „Kombinationskombination“ wird eine Stream () -Methode zugewiesen, die den Stream des angegebenen String -Arrays erstellt. Anschließend wenden wir die Methode record () auf den Stream des String -Arrays an. Die Reduzierung () -Methode kombiniert dann die Saiten „S1“ und „S2“ mit dem Hash-Zeichen „-“, da der Ausdruck dort festgelegt ist. Danach zeigen wir die kombinierten String -Ergebnisse an, indem wir die IF -Bedingung verwenden, die validiert, wenn die kombinierte Zeichenfolge vorhanden ist oder nicht.

Die String-Array-Elemente werden nun mit dem Kombinierer „-“ kombiniert, die die Methode record () als Parameter.

Beispiel 6:

Jetzt werden die Methode record () und die Karte in einem Objekt bereitgestellt, um die Summe der BigDecimal -Werte zu erhalten.

Java importieren.Mathematik.Bigdecimal;
Java importieren.Util.Arrays;
Java importieren.Mathematik.RoundingMode;
Java importieren.Util.Aufführen;
öffentliche Klasse streamReduce6
public static void main (String [] args)
Aufführen Billlist = Arrays.ASLIST (
Neue Rechnung ("B26", Bigdecimal.Valueof (1045), Bigdecimal.Wert von (2.5))),
Neue Rechnung ("B92", Bigdecimal.Valueof (1721), BigDecimal.Wert von (4)),
Neue Rechnung ("B13", Bigdecimal.Valueof (2993), BigDecimal.Wert von (3.5)))
);
BigDecimal Total = Billlist.Strom().
Karte (Daten -> Daten.getDiscount ().multiplizieren (Daten.getAmount ())).
Reduzieren (Bigdecimal.Zero, BigDecimal :: Add);
System.aus.println (insgesamt);


Klasse Bill
String Billno;
Bigdecimal Billamount;
Bigdecimal Billdiscount;
Öffentliche Rechnung (String Billno, Bigdecimal Billamount, Bigdecimal Billdiscount)
Das.Billno = Billno;
Das.Billamount = Billamount;
Das.Billdiscount = Billdiscount;

public bigdecimal getAmount ()
Return Billamount;

public bigdecimal getDiscount ()
Return Billdiscount;

Wir definieren die Listenschnittstelle für die "Bill" -Klasse, in der das Objekt "Billlist" deklariert wird. Die „Billlist“ wird weiter mit der ASList () -Methode festgelegt, bei der wir die BigDecimal -Werte für das Feld der „Bill“ -Klasse mit dem neuen Schlüsselwort initialisieren. Die ValueOf () -Methode wird bereitgestellt, um die Werte gegen jedes Attribut der "Bill" -Klasse einzulegen. Danach erstellen wir das BigDecimal -Objekt "Total", wobei die Stream () -Methode verwendet wird, um den Stream der "Billlist" -Eremente zu erstellen.

Anschließend werden die Stream -Elemente über die MAP () -Methode abgebildet, wobei die Methode multiply () angegeben ist. Die Methode record () wird in den zugeordneten Ergebnissen bereitgestellt, bei denen der identifizierte Wert für BigDecimal Null ist und der Akkumulator durch Angeben der BigDecimal :: Methode Referenz hinzugefügt wird. Die Ergebnisse des „Gesamt“ -Objekts werden angezeigt, an denen der Kartenbetrieb und der Reduzierbetrieb durchgeführt werden. Zuletzt erstellen wir die "Bill" -Wrapperklasse, in der die Attribute von String Billno, Billamount und Billdiscount erklärt werden.

Das vorherige Programm gibt den folgenden Wert als die Gesamtzahl der Rechnungen aus:

Abschluss

Mit der Methode record () können wir ein einzelnes Ergebnis aus einer Reihe von Elementen erstellen, indem wir den Reduktionsvorgang kontinuierlich auf die Elemente in der Serie anwenden. Wir haben den Java -Stream benutzt.Reduzierung () Methode in den Beispielprogrammen dieses Artikels, die die Stream -Elemente reduzieren. Der Stream.Reduzierung () Methode ist bei veränderlichen Reduktionsoperationen nicht wirksam. Die Verwendung mit großen Strömen kann daher eine Herausforderung sein.