Java -strømmen reduserer

Java -strømmen reduserer
Java Stream API dekker utallige parallelliseringskompatible tilnærminger som reduksjon og terminaloperasjoner. Her vil vi utforske reduksjonsdriften av Java Stream -grensesnittet som har redusere () -metoden. Redusere () -metoden er en prosess som kombinerer alle elementer. Reduser () -metoden bruker den binære operatøren for alle elementer som vises i strømmen. Operatørens første argument i den strømmen må returnere verdien av den siste applikasjonen, og det andre argumentet må returnere elementet som for øyeblikket er til stede i strømmen.

Eksempel 1:

Strømmen reduserer () -metodefunksjonaliteten kan enkelt demonstreres med Java -programmet. Følgende er implementering av reduksjonsoperasjonen ved bruk av strømmen reduserer () -metoden for å få den lengre strengen.

Importer Java.util.*;
Klassestrømning1
public static void main (String [] args)

Liste strNames = Arrays.ASList ("String1", "String2", "String3",
"String4", "String5");
Valgfri NewsTr = strNames.strøm().Reduser ((FirstName, SecondName)->
fornavn.lengde ()> sekundnavn.lengde()? FirstName: SecondName);
NewsTr.IFPresent (system.ut :: println);

Vi har gitt et listegrensesnitt der vi erklærer "strname" -objektet først og deretter ringer matriser.ASList () -metode. Matriser.ASList () Metode legger inn strengelementet i form av listen. Deretter gir vi det "valgfrie" klassegrensesnittet fordi resultatene av listen kan inneholde nullverdiene. Vi definerer “NewsTr” -objektet der reduksjonsmetoden () er distribuert etter strømmen () -klassen på “Strnames”. Lambda -uttrykket er gitt til reduseringsmetoden () som legger inn de to strengverdiene for å oppnå den lengre strengen. På grunn av muligheten for at listen som redusering () kjøres kan være tom, er reduseringsmetoden () metodeutgangen valgfritt. Etter dette bruker vi utskriftsfunksjonen for å skrive ut resultatet av redusere () -metoden.

Den lengste strengen etter reduksjonsoperasjonen fra strømmen reduserer () -operasjonen blir hentet inne i utgangen.

Eksempel 2:

Strømmen reduserer () -metoden kan også brukes sammen med Java -akkumulatoren. Følgende kildeprogram bruker redusere () -metoden med akkumulatoren for å oppsummere elementene og finne sitt gjennomsnitt.

Importer Java.util.Matriser;
Importer Java.util.Liste;
offentlig klasse StreamReduce2
public static void main (String [] args)
Liste < Integer > NumbersArray = Arrays.ASList (7, 1, 3, 9, 15);
int arraysum = 0;
for (int i = 0; i < NumbersArray.size(); i++)
Arraysum += tallArray.få (i);

System.ute.Println ("Gjennomsnitt" + Arraysum / NumbersArray.størrelse());

Vi genererer listen over numeriske verdier fra array class ASList () -metoden. Listen initialiseres i "tallarray" -variabelen i listeklassen. Deretter definerer vi en annen variabel som er "AVG" for å evaluere gjennomsnittet av den medfølgende listen. Vi påkaller strømmen reduserer () metoden i "AVG" -variabelen og setter lambda -uttrykket som en akkumulator innenfor reduksjonsmetoden (). Reduser () -metoden tar "summen" og "curvalue" som inngang. Heltallstrømmenes elementer er alle lagret av denne akkumulatoren. Etter å ha fått summen av strømlisteelementene, oppnår vi gjennomsnittet ved å dele summen av elementet med lengden på størrelsen på heltalllisten.

Gjennomsnittet av den gitte listen over elementer oppnås ved bruk av Reduce () -metoden med akkumulatoren.

Eksempel 3:

Strømmen reduserer () -metoden har en annen innpakningsklasse der min og maks er en av dem. Følgende implementering av programmet tar sikte på å oppnå maksimale verdier fra den gitte samlingen av elementer.

Importer Java.util.ArrayList;
Importer Java.util.Matriser;
Importer Java.util.Liste;
Klassestrømning3

Offentlig statisk heltall getMaxValue (liste Twodigits)

Returner twoDigits.strøm()
.Reduser (Heltall :: Maks)
.få();

public static void main (String [] args)

Liste Twodigits = Arrays.ASList (14, 52, 76, 95, 39, 41);
System.ute.println ("maksimalt element er" + getMaxValue (Twodigits));

Vi konstruerer GetMaxValue -funksjonen i Java -klassen. GetMaxValue () -funksjonen er utstyrt med "TwoDigits" -parameterobjektet. Deretter bruker vi returnøkkelordet i getMaxValue () -funksjonen. Vi kaller redusere () -metoden med returnøkkelordet. Reduser () -metoden tildeles en metodereferanse, Heltall :: maks.

Etter dette bruker vi get () -metoden etter reduksjon () metodeoperasjon for å få de forventede resultatene. Deretter har vi en Main () -metode der "TwoDigit" -objektet initialiseres med listen over heltallelementene. Vi kaller også getMaxValue () -funksjonen i utskriftslinjen til Java og passerer "TwoDigit" -objektet for å generere maksimal verdi for heltalllisten.

Fra redusering () -metodens forhåndsdefinerte maksimale drift oppnår vi maksimal verdi fra listen over noen heltallverdier.

Eksempel 4:

Det er et annet program for reduksjonsoperasjonen der alle tallene i et bestemt område multipliseres for å få sine produkter ved å bruke Reduct () -metoden.

Importer Java.util.*;
Importer Java.util.strøm.Intstream;
KlassestrømmenRed4
public static void main (String [] args)

int numProduct = intStream.rekkevidde (3, 9)
.Reduser ((n1, n2) -> n1 * n2)
.oreller (-1);
System.ute.println ("Produkt:" + produkt);

Vi oppretter "numProduct" -variabelen som er satt med IntStream Class Range () -metoden. Områdeverdiene tilordnes denne området () -metoden. Vi bruker også Reduce () -metoden etter å ha spesifisert Range () -metoden. Reduser () -metoden er definert med uttrykket for å beregne produktet av “N1” og “N2” innenfor området i det gitte bortsett fra det høyre elementet. Println () -metoden brukes deretter til å skrive ut produktet fra inngangsområdet.

Produktet av alle rekkeviddeelementene oppnås ved hjelp av reduksjonsteknikken.

Eksempel 5:

Reduser () -metoden tar en "Combiner" -parameter som brukes til å kombinere to verdier. Det må jobbe med akkumulatorens funksjon. Bare de parallelle strømmer kan kombineres effektivt når kombinatorparameteren kombinerer utgangen til alle understrømmer for parallelle strømmer.

Importer Java.util.*;
KlassestrømmenRed5
public static void main (String [] args)

String [] arrValues ​​= "live", "lang", "liv";
Valgfri Combinestring = Arrays.Stream (ArrValues)
.Reduser ((S1, S2)-> S1 + "-" + S2);
hvis (kombinerer.er tilstede())
System.ute.Println (Combinestring.få());


Vi har en erklæring om streng -array -objektet, "ArrValues", og vi initialiserer det med de tre strengelementene. Deretter lager vi det valgfrie "Combinestring" -klassen for å kombinere de forrige strengelementene. "Combinestring" -objektet tildeles en strøm () -metode som oppretter strømmen av den gitte strenggruppen. Deretter bruker vi reduseringsmetoden () på strømmen av strenggruppen. Reduser () -metoden kombinerer deretter “S1” og “S2” strengene med hasjkarakteren “-” siden uttrykket er satt der. Etter det viser vi de kombinerte strengresultatene ved å bruke IF -tilstanden som validerer om den kombinerte strengen er til stede eller ikke.

Streng-arrayelementene er nå kombinert med kombinasjonen “-” som reduserer () metoden som en parameter.

Eksempel 6:

Nå er redusere () -metoden og kartet begge distribuert i et objekt for å få summen av de store Decimal Values.

Importer Java.matte.Bigdecimal;
Importer Java.util.Matriser;
Importer Java.matte.RoundingMode;
Importer Java.util.Liste;
offentlig klasse StreamReduce6
public static void main (String [] args)
Liste BillList = Arrays.ASList (
Ny regning ("B26", BigDecimal.Valueof (1045), BigDecimal.Valueof (2.5)),
Ny regning ("B92", BigDecimal.Valueof (1721), BigDecimal.Valueof (4)),
Ny regning ("B13", BigDecimal.Valueof (2993), BigDecimal.Valueof (3.5))
);
BigDecimal Total = Billlist.strøm().
Kart (data -> Data.GetDiscount ().Multipliser (data.getAmount ()))).
Reduser (BigDecimal.Null, bigdecimal :: add);
System.ute.println (totalt);


Klasse Bill
Streng Billno;
BigDecimal Billamount;
BigDecimal Billdiscount;
Offentlig regning (String Billno, BigDecimal Billamount, BigDecimal BillDiscount)
dette.Billno = Billno;
dette.Billamount = Billamount;
dette.BillDiscount = BillDiscount;

public bigdecimal getAmount ()
returner Billamount;

offentlig BigDecimal getDiscount ()
returner Billdiscount;

Vi definerer listegrensesnittet for "Bill" -klassen der "Billlist" -objektet er erklært. "Billlist" er ytterligere satt med ASList () -metoden der vi initialiserer de store Decimal -verdiene for feltet "Bill" -klassen ved hjelp av det nye nøkkelordet. ValueOf () -metoden er distribuert for å sette inn verdiene mot hver attributt til "Bill" -klassen. Etter det oppretter vi BigDecimal -objektet, “Total”, der Stream () -metoden brukes til å lage strømmen av “Billlist” -elementene.

Deretter blir strømelementene kartlagt via MAP () -metoden der Multiply () -metoden er spesifisert for å få produktet fra getAmount () getter -metoden i "Bill" -klassen. Reduseringsmetoden () er distribuert på de kartlagte resultatene der den identifiserte verdien for BigDecimal er null og akkumulatoren er satt ved å gi BigDecimal :: Legg til metodereferanse. Resultatene fra det "totale" objektet vises der kartoperasjonen og reduksjonsdriften utføres. Til slutt konstruerer vi "Bill" -pakningsklassen der strengen Billno, Billamount og Billdiscount Attributtene er erklært.

Det forrige programmet sender ut følgende verdi som summen av regningene:

Konklusjon

Reduser () -metoden gjør at vi kan skape et enkelt utfall fra en serie elementer ved kontinuerlig å bruke reduksjonsoperasjonen på varene i serien. Vi brukte Java -strømmen.Reduser () Metode i eksempelprogrammene til denne artikkelen som reduserer strømelementene. Imidlertid strømmen.redusere () -metoden er ikke effektiv for mutable reduksjonsoperasjoner, så det kan være utfordrende å bruke den med store bekker.