Strumień Java zmniejsz

Strumień Java zmniejsz
API strumienia Java obejmuje niezliczone podejścia kompatybilne się z równoległością, takie jak operacje redukcyjne i terminalowe. Tutaj zbadamy operację redukcji interfejsu strumieniowego Java, która ma metodę redukującą (). Metoda redukuj () to proces łączący wszystkie elementy. Metoda redukuj () wykorzystuje operator binarny dla wszystkich elementów wyświetlanych w strumieniu. Pierwszy argument operatora w tym strumieniu musi zwrócić wartość najnowszej aplikacji, a drugi argument musi zwrócić element, który jest obecnie obecny w strumieniu.

Przykład 1:

Funkcjonalność metody strumienia () można łatwo wykazać w programie Java. Poniżej znajduje się implementacja operacji redukcji przy użyciu metody strumienia Ruck () w celu uzyskania dłuższego ciągu.

Importuj Java.Util.*;
klasa StreamReduce1
public static void main (string [] args)

Lista strnames = tablice.Aslist („String1”, „String2”, „String3”,
„String4”, „String5”);
Opcjonalny Newstr = StrnaMes.strumień().Zmniejsz ((pierwsza nazwa, nazwa drugiego)->
imię.długość ()> nazwa drugiego.długość()? imię Nazwisko);
Newstr.Ifpresent (system.Out :: println);

Podaliśmy interfejs listy, w którym najpierw deklarujemy obiekt „Strname”, a następnie wywołuje tablice.metoda aslist (). Tablice.metoda aslist () wprowadza element ciągów w formie listy. Następnie podajemy „opcjonalny” interfejs klasy, ponieważ wyniki listy mogą zawierać wartości zerowe. Definiujemy obiekt „Newstr”, w którym metoda redukuj () jest wdrażana po klasie strumieniowej () na „StrnaMe”. Wyrażenie lambda jest dostarczane do metody redukuj (), która wprowadza dwie wartości ciągów, aby uzyskać dłuższy ciąg. Ze względu na możliwość uruchamiania listy, na której uruchomi się redukuj (), wyjście metody reduku. Następnie używamy funkcji drukowania do wydrukowania wyniku metody reduku.

Najdłuższy ciąg po operacji redukcji ze strumienia Ruck () jest pobierany wewnątrz wyjścia.

Przykład 2:

Metodę strumieniową () można również zastosować za pomocą akumulatora Java. Poniższy program źródłowy wykorzystuje metodę redukuj () z akumulatorem, aby sumować elementy i znaleźć ich średnią.

Importuj Java.Util.Tablice;
Importuj Java.Util.Lista;
klasa publiczna StreamReduce2
public static void main (string [] args)
Lista < Integer > NumberArray = tablice.Aslist (7, 1, 3, 9, 15);
int arraysum = 0;
dla (int i = 0; i < NumbersArray.size(); i++)
Arraysum += liczbArray.Get (i);

System.na zewnątrz.println („średnia” + tablica / liczbArray.rozmiar());

Generujemy listę wartości numerycznych z metody klasy tablicy ASLIST (). Lista jest inicjowana w zmiennej „NumberArray” w klasie listy. Następnie definiujemy inną zmienną, która jest „AVG” w celu oceny średniej podanej listy. Wzywamy metodę strumienia () wewnątrz zmiennej „AVG” i ustawiamy wyrażenie lambda jako akumulator w metodzie redukuj (). Metoda redukująca () przyjmuje „sumę” i „currValue” jako dane wejściowe. Elementy całkowitego strumienia są przechowywane przez ten akumulator. Po uzyskaniu sumy elementów listy strumieniowej uzyskujemy średnią, dzieląc sumę elementu przez długość rozmiaru listy liczb całkowitych.

Średnia z podanej listy elementów jest uzyskiwana przy użyciu metody redukuj () z akumulatorem.

Przykład 3:

Metoda strumieniowa () ma inną klasę opakowania, w której min i maksymalnie są jednym z nich. Poniższe wdrożenie programu ma na celu uzyskanie maksymalnych wartości z danego zbioru elementów.

Importuj Java.Util.ArrayList;
Importuj Java.Util.Tablice;
Importuj Java.Util.Lista;
klasa StreamReduce3

publiczna liczba całkowita getMaxValue (lista Twodigits)

zwróć Twodigits.strumień()
.Zmniejsz (liczbę całkowitą :: max)
.Dostawać();

public static void main (string [] args)

Lista Twodigits = tablice.Aslist (14, 52, 76, 95, 39, 41);
System.na zewnątrz.println („Maksymalny element to” + getMaxValue (twodigits));

Konstruujemy funkcję getMaxValue w klasie Java. Funkcja getMaxValue () jest dostarczana z obiektem parametrów „Twodigits”. Następnie używamy słowa kluczowego powrotu w funkcji getMaxValue (). Nazywamy metodę redukuj () za pomocą słowa kluczowego powrotu. Metodę redukującą () przypisuje się odniesienie metody, liczba całkowita :: max.

Następnie używamy metody get () po operacji redukuj (), aby uzyskać oczekiwane wyniki. Następnie mamy metodę main (), w której obiekt „Twodigit” jest inicjowany z listą elementów całkowitych. Również nazywamy funkcję getMaxValue () w wierszu drukowania Java i przekazujemy obiekt „Twodigit”, aby wygenerować maksymalną wartość dla listy liczb całkowitych.

Z predefiniowanej maksymalnej operacji metody Ruck () otrzymujemy maksymalną wartość z listy niektórych wartości całkowitych.

Przykład 4:

Istnieje inny program operacji redukcji, w którym wszystkie liczby w określonym zakresie są mnożone w celu uzyskania ich produktów za pomocą metody Ruck ().

Importuj Java.Util.*;
Importuj Java.Util.strumień.Intstream;
klasa StreamReduce4
public static void main (string [] args)

int numproduct = intstream.Zakres (3, 9)
.Zmniejsz ((n1, n2) -> n1 * n2)
.Orelse (-1);
System.na zewnątrz.println („produkt:” + produkt);

Tworzymy zmienną „numproduct”, która jest ustawiona za pomocą metody INTStream Class Range (). Wartości zakresu są przypisane do tej metody zakresu (). Używamy również metody redukuj () po określeniu metody Range (). Metoda redukuj () jest zdefiniowana z wyrażeniem w celu obliczenia iloczyn „n1” i „n2” w danym zakresie, z wyjątkiem elementu najbardziej prawego. Metoda println () jest następnie używana do wydrukowania produktu zakresu wejściowego.

Produkt wszystkich elementów zasięgu odbywa się za pomocą techniki redukcji.

Przykład 5:

Metoda redukuj () przyjmuje parametr „kombiner”, który jest używany do połączenia dwóch wartości. Musi pracować z funkcją akumulatora. Tylko równoległe strumienie można skutecznie łączyć, ponieważ parametr kombiner.

Importuj Java.Util.*;
klasa StreamReduce5
public static void main (string [] args)

String [] arvelues = „żyje”, „długie”, „życie”;
Opcjonalny Combinestring = tablice.strumień (arcenki)
.redukuj ((s1, s2)-> s1 + "-" + s2);
if (kombinowanie.jest obecny())
System.na zewnątrz.println (kombinowanie.Dostawać());


Mamy deklarację obiektu tablicy strun, „Arvalues”, i inicjujemy go z trzema elementami łańcuchowymi. Następnie tworzymy opcjonalny obiekt klasy „Combinestring”, aby połączyć poprzednie elementy ciągów. Obiekt „Combinestring” przypisuje się metodę strumienia (), która tworzy strumień podanej tablicy ciągów. Następnie stosujemy metodę redukuj () na strumieniu tablicy ciągu. Metoda redukuj () łączy następnie ciągami „S1” i „S2” z postacią skrótu „-”, ponieważ wyrażenie jest tam ustawione. Następnie wyświetlamy połączone wyniki ciągów, stosując warunek IF, który sprawdza się, czy połączony ciąg jest obecny, czy nie.

Elementy tablicy strun są teraz łączone z kombinerą „-”, którą metoda redukuj () jako parametr.

Przykład 6:

Teraz metoda zmniejszania () i mapa są wdrażane w obiekcie, aby uzyskać sumę wartości bigDecimal.

Importuj Java.matematyka.Bigdecimal;
Importuj Java.Util.Tablice;
Importuj Java.matematyka.RoundingMode;
Importuj Java.Util.Lista;
klasa publiczna StreamReduce6
public static void main (string [] args)
Lista Billlist = tablice.aslist (
Nowy rachunek („B26”, bigdecimal.wartość (1045), bigdecimal.wartość (2.5)),
Nowy rachunek („B92”, Bigdecimal.Valueof (1721), bigdecimal.wartość (4)),
Nowy rachunek („B13”, Bigdecimal.wartość (2993), bigdecimal.wartość (3.5))
);
Bigdecimal Total = Billlist.strumień().
Mapa (dane -> dane.getdiscount ().pomnóż (dane.getamount ())).
Zmniejsz (bigdecimal.Zero, bigdecimal :: add);
System.na zewnątrz.println (ogółem);


Bill klasowy
String Billno;
Bigdecimal Billamount;
Bigdecimal Billdiscount;
Publiczny rachunek (String Billno, Bigdecimal Billamount, Bigdecimal Billdiscount)
Ten.Billno = Billno;
Ten.Billamount = Billamount;
Ten.Billdiscount = Billdiscount;

public bigdecimal getamount ()
zwrócić Billamount;

public Bigdecimal getdiscount ()
zwrot Billdiscount;

Definiujemy interfejs listy dla klasy „rachunki”, w której zadeklarowany jest obiekt „billlisty”. „Billilista” jest dodatkowo ustawiony metodą aslist (), w której inicjujemy wartości bigDecimal dla pola klasy „Bill” za pomocą nowego słowa kluczowego. Metoda valueOF () jest wdrażana w celu wstawienia wartości w stosunku do każdego atrybutu klasy „Bill”. Następnie tworzymy obiekt bigDecimal „Total”, w którym metoda strumienia () jest używana do tworzenia strumienia elementów „billlistycznych”.

Następnie elementy strumienia są mapowane metodą MAP (), w której określana jest metoda mnożenia (), aby uzyskać produkt z metody getamount () klasy „Bill” klasy „Bill”. Metoda redukuj () jest wdrażana na zmapowanych wynikach, w których zidentyfikowana wartość dla bigDecimal wynosi zero, a akumulator jest ustawiony przez podanie BigDecimal :: Dodaj odniesienie metody. Wyświetlane są wyniki obiektu „całkowitego”, w których przeprowadzana jest operacja mapy i redukcja. Na koniec konstruujemy klasę opakowania „Bill”, w której deklarowane są atrybuty String Billno, Billamount i Billdiscount.

Poprzedni program przedstawia następującą wartość jako sumę rachunków:

Wniosek

Metoda redukuj () pozwala nam utworzyć jeden wynik z serii elementów poprzez ciągłe stosowanie operacji redukcji do elementów z serii. Użyliśmy strumienia Java.Metoda redukuj () w przykładowych programach tego artykułu, który zmniejsza elementy strumienia. Jednak strumień.Metoda redukująca () nie jest skuteczna w operacjach zmiennej redukcji, więc stosowanie jej z dużymi strumieniami może być trudne.