Il flusso Java si riduce

Il flusso Java si riduce
L'API di Java Stream copre innumerevoli approcci compatibili con parallelizzazione come la riduzione e le operazioni terminali. Qui esploreremo l'operazione di riduzione dell'interfaccia del flusso Java che ha il metodo di riduzione (). Il metodo di riduzione () è un processo che combina tutti gli elementi. Il metodo di riduzione () utilizza l'operatore binario per tutti gli elementi visualizzati nel flusso. Il primo argomento dell'operatore in quel flusso deve restituire il valore dell'applicazione più recente e il secondo argomento deve restituire l'elemento che è attualmente presente nel flusso.

Esempio 1:

La funzionalità del metodo di riduzione del flusso () può essere facilmente dimostrata con il programma Java. Di seguito è riportata l'implementazione dell'operazione di riduzione utilizzando il metodo Stream Riduci () per ottenere la stringa più lunga.

Importa Java.util.*;
Class StreamReDuce1
public static void main (string [] args)

Elenco strnames = array.Aslist ("String1", "String2", "String3",
"String4", "String5");
Opzionale Newstr = strnames.flusso().Riduci ((firstName, SecondName)->
nome di battesimo.lunghezza ()> secondo nome.lunghezza()? primo nome Secondo nome);
Newstr.ifpresent (sistema.out :: println);

Abbiamo fornito un'interfaccia di elenco in cui dichiariamo prima l'oggetto "strname" e quindi chiamiamo gli array.Metodo Aslist (). Gli array.Il metodo Aslist () inserisce l'elemento stringa nella forma dell'elenco. Quindi, forniamo l'interfaccia di classe "opzionale" perché i risultati dell'elenco possono contenere i valori null. Definiamo l'oggetto "Newstr" in cui il metodo di riduzione () viene distribuito dopo la classe Stream () su "strnames". L'espressione di lambda viene fornita al metodo di riduzione () che inserisce i valori delle due stringa per ottenere la stringa più lunga. A causa della possibilità che l'elenco su cui viene eseguita la riduzione () possa essere vuota, l'output del metodo di riduzione () è facoltativo. Successivamente, utilizziamo la funzione di stampa per stampare il risultato del metodo di riduzione ().

La stringa più lunga dopo l'operazione di riduzione dall'operazione di riduzione del flusso () viene recuperata all'interno dell'uscita.

Esempio 2:

Il metodo di riduzione del flusso () può anche essere impiegato con l'accumulatore Java. Il seguente programma di origine utilizza il metodo di riduzione () con l'accumulatore per sommare gli elementi e trovare la loro media.

Importa Java.util.Array;
Importa Java.util.Elenco;
Classe pubblica StreamReduce2
public static void main (string [] args)
Elenco < Integer > NumeraRray = array.Aslist (7, 1, 3, 9, 15);
int arraysum = 0;
per (int i = 0; i < NumbersArray.size(); i++)
Arraysum += numeraRray.ottenere (i);

Sistema.fuori.println ("media" + arraysum / numeraray.misurare());

Generiamo l'elenco dei valori numerici dal metodo della classe Array Aslist (). L'elenco è inizializzato all'interno della variabile "numeraRray" della classe di elenco. Quindi, definiamo un'altra variabile che è "AVG" per valutare la media dell'elenco fornito. Invochiamo il metodo di riduzione () di ridotto del flusso all'interno della variabile "AVG" e impostiamo l'espressione di lambda come accumulatore all'interno del metodo di riduzione (). Il metodo di riduzione () prende la "somma" e il "CurrValue" come input. Gli articoli del flusso intero sono tutti archiviati da questo accumulatore. Dopo aver ottenuto la somma degli elementi dell'elenco del flusso, otteniamo la media dividendo la somma dell'elemento per la lunghezza della dimensione dell'elenco intero.

La media dell'elenco dato di elementi è ottenuta utilizzando il metodo Riduci () con l'accumulatore.

Esempio 3:

Il metodo di riduzione () del flusso ha una classe wrapper diversa in cui Min e Max sono uno di questi. La seguente implementazione del programma mira a ottenere i valori massimi dalla raccolta data di elementi.

Importa Java.util.Lista di array;
Importa Java.util.Array;
Importa Java.util.Elenco;
Classe StreamReduce3

intero statico pubblico getmaxvalue (elenco Twodigits)

Restituisci Twodigits.flusso()
.Riduci (intero :: max)
.Ottenere();

public static void main (string [] args)

Elenco Twodigits = array.Aslist (14, 52, 76, 95, 39, 41);
Sistema.fuori.println ("Elemento massimo è" + getMaxValue (twodigits));

Costruiamo la funzione GetMaxValue all'interno della classe Java. La funzione getMaxValue () è fornita con l'oggetto parametro "Twodigits". Successivamente, utilizziamo la parola chiave di ritorno nella funzione getMaxValue (). Chiamiamo il metodo di riduzione () con la parola chiave di ritorno. Il metodo riduttore () viene assegnato un riferimento del metodo, il numero intero :: max.

Successivamente, utilizziamo il metodo Get () dopo l'operazione del metodo di riduzione () per ottenere i risultati previsti. Quindi, abbiamo un metodo principale () in cui l'oggetto "twodigit" viene inizializzato con l'elenco degli elementi interi. Inoltre, chiamiamo la funzione getMaxValue () nella riga di stampa di Java e passiamo l'oggetto "Twodigit" per generare il valore massimo per l'elenco intero.

Dall'operazione massima predefinita del metodo di riduzione (), otteniamo il valore massimo dall'elenco di alcuni valori interi.

Esempio 4:

Esiste un altro programma dell'operazione di riduzione in cui tutti i numeri in un intervallo specifico vengono moltiplicati per ottenere i loro prodotti utilizzando il metodo di riduzione ().

Importa Java.util.*;
Importa Java.util.flusso.IntStream;
Class StreamReduce4
public static void main (string [] args)

int numProduct = intStream.intervallo (3, 9)
.Ridurre ((N1, N2) -> N1 * N2)
.Orelse (-1);
Sistema.fuori.println ("Prodotto:" + prodotto);

Creiamo la variabile "NumProduct" che è impostata con il metodo IntStream Class Range (). I valori di intervallo sono assegnati a questo metodo intervallo (). Utilizziamo anche il metodo di riduzione () dopo aver specificato il metodo intervallo (). Il metodo di riduzione () è definito con l'espressione per calcolare il prodotto di "N1" e "N2" all'interno dell'intervallo nell'elemento più a destra. Il metodo println () viene quindi utilizzato per stampare il prodotto dell'intervallo di input.

Il prodotto di tutti gli elementi di gamma si ottiene utilizzando la tecnica di riduzione.

Esempio 5:

Il metodo di riduzione () prende un parametro "combinatore" che viene utilizzato per combinare due valori. Deve lavorare con la funzione dell'accumulatore. Solo i flussi paralleli possono essere combinati in modo efficace poiché il parametro del combinatore combina l'output di tutti i sotto-flusso per flussi paralleli.

Importa Java.util.*;
Classe StreamReDuce5
public static void main (string [] args)

String [] arrValues ​​= "Live", "Long", "Life";
Opzionale CombiningString = array.Stream (arvalues)
.ridurre ((S1, S2)-> S1 + "-" + S2);
Se (combinante.è presente())
Sistema.fuori.println (combinante.Ottenere());


Abbiamo una dichiarazione dell'oggetto array di stringhe, "arvalori", e lo inizializziamo con i tre elementi di stringa. Quindi, creiamo l'oggetto di classe "combinante" opzionale per combinare gli elementi stringa precedenti. All'oggetto "combinante" viene assegnato un metodo Stream () che crea il flusso dell'array di stringa dato. Quindi, applichiamo il metodo di riduzione () sul flusso dell'array di stringhe. Il metodo di riduzione () combina quindi le stringhe "S1" e "S2" con il carattere hash "-" poiché l'espressione è impostata lì. Successivamente, visualizziamo i risultati della stringa combinati utilizzando la condizione IF che convalida se la stringa combinata è presente o meno.

Gli elementi dell'array di stringa sono ora combinati con il combinatore "-" che il metodo di riduzione () come parametro.

Esempio 6:

Ora, il metodo di riduzione () e la mappa sono entrambi distribuiti all'interno di un oggetto per ottenere la somma dei valori BigDecimal.

Importa Java.matematica.Bigdecimal;
Importa Java.util.Array;
Importa Java.matematica.RoundingMode;
Importa Java.util.Elenco;
Classe pubblica StreamReduce6
public static void main (string [] args)
Elenco BillList = array.Aslist (
New Bill ("B26", BigDecimal.valore di (1045), bigdecimal.valore di (2.5)),
New Bill ("B92", BigDecimal.valore di (1721), bigdecimal.valore di (4)),
New Bill ("B13", BigDecimal.valore di (2993), bigdecimal.valore di (3.5))
);
Totale bigdecimal = Billlist.flusso().
mappa (dati -> dati.getDiscount ().Moltiplica (dati.getAMount ())).
Ridurre (BigDecimal.Zero, bigdecimal :: aggiungi);
Sistema.fuori.println (totale);


Classe Bill
String Bilno;
Bigdecimal Billamount;
Bigdecimal Billdiscount;
Public Bill (String Bilno, BigDecimal Billamount, BigDecimal BillDiscount)
Questo.Bilno = Bilno;
Questo.Billamount = Billamount;
Questo.BillDiscount = BillDiscount;

pubblico bigdecimal getAMount ()
restituire Billamount;

pubblico bigdecimal getDiscount ()
restituire BillDiscount;

Definiamo l'interfaccia dell'elenco per la classe "Bill" in cui viene dichiarato l'oggetto "Billlist". Il "BillList" è ulteriormente impostato con il metodo Aslist () in cui inizializziamo i valori BigDecimal per il campo della classe "Bill" utilizzando la nuova parola chiave. Il metodo ValueOf () viene distribuito per inserire i valori rispetto a ciascun attributo della classe "fattura". Successivamente, creiamo l'oggetto bigdecimal, "totale", in cui il metodo Stream () viene utilizzato per creare il flusso degli elementi "Billlist".

Quindi, gli elementi del flusso vengono mappati tramite il metodo Map () in cui viene specificato il metodo multiply () per ottenere il prodotto dal metodo getAmount () getter della classe "Bill". Il metodo di riduzione () viene distribuito sui risultati mappati in cui il valore identificato per BigDecimal è zero e l'accumulatore è impostato dando il riferimento del metodo BigDecimal :: Aggiungi. Vengono visualizzati i risultati dell'oggetto "totale" in cui vengono condotte l'operazione della mappa e l'operazione di riduzione. Infine, costruiamo la classe Wrapper "Bill" in cui sono dichiarati gli attributi String Bilno, Billamount e BillDiscount.

Il programma precedente emette il seguente valore come il totale delle fatture:

Conclusione

Il metodo di riduzione () ci consente di creare un singolo risultato da una serie di elementi applicando continuamente l'operazione di riduzione agli elementi della serie. Abbiamo usato il flusso Java.Ridurre () metodo nei programmi di esempio di questo articolo che riducono gli elementi del flusso. Tuttavia, il flusso.Il metodo di riduzione () non è efficace nelle operazioni di riduzione mutabile, quindi l'utilizzo con flussi di grandi dimensioni può essere impegnativo.