logo

Java 8 Stream

Java oferă un nou pachet suplimentar în Java 8 numit java.util.stream. Acest pachet constă din clase, interfețe și enumerare pentru a permite operațiuni în stil funcțional asupra elementelor. Puteți utiliza stream importând pachetul java.util.stream.


Stream oferă următoarele caracteristici:

  • Stream nu stochează elemente. Pur și simplu transmite elemente dintr-o sursă, cum ar fi o structură de date, o matrice sau un canal I/O, printr-o conductă de operații de calcul.
  • Fluxul este de natură funcțională. Operațiile efectuate pe un flux nu modifică sursa acestuia. De exemplu, filtrarea unui Stream obținut dintr-o colecție produce un nou Stream fără elementele filtrate, mai degrabă decât eliminarea elementelor din colecția sursă.
  • Fluxul este leneș și evaluează codul numai atunci când este necesar.
  • Elementele unui flux sunt vizitate o singură dată în timpul vieții unui flux. La fel ca un Iterator, trebuie generat un nou flux pentru a revedea aceleași elemente ale sursei.

Puteți folosi stream pentru a filtra, colecta, imprima și converti dintr-o structură de date în alta etc. În exemplele următoare, am aplicat diverse operații cu ajutorul stream-ului.

Metode de interfață Java Stream

Metode Descriere
boolean allMatch(predicat predicat) Returnează toate elementele acestui flux care se potrivesc cu predicatul furnizat. Dacă fluxul este gol, atunci true este returnat și predicatul nu este evaluat.
boolean anyMatch (predicat predicat) Returnează orice element al acestui flux care se potrivește cu predicatul furnizat. Dacă fluxul este gol, atunci este returnat false și predicatul nu este evaluat.
static Stream.Builder builder() Returnează un generator pentru un flux.
R collect(Colector de colector) Efectuează o operație de reducere mutabilă asupra elementelor acestui flux folosind un colector. Un colector încapsulează funcțiile utilizate ca argumente de colectare (furnizor, biconsum, biconsum), permițând reutilizarea strategiilor de colectare și compoziția operațiunilor de colectare, cum ar fi gruparea sau partiționarea pe mai multe niveluri.
R collect (furnizor furnizor, acumulator BiConsumer, combinator BiConsumer) Efectuează o operație de reducere mutabilă asupra elementelor acestui flux. O reducere mutabilă este una în care valoarea redusă este un container de rezultat mutabil, cum ar fi un ArrayList, iar elementele sunt încorporate prin actualizarea stării rezultatului, mai degrabă decât prin înlocuirea rezultatului.
Stream static concat(Stream a, Stream b) Se creează un flux leneș concatenat ale cărui elemente sunt toate elementele primului flux urmate de toate elementele celui de-al doilea flux. Fluxul rezultat este ordonat dacă ambele fluxuri de intrare sunt ordonate și paralel dacă oricare dintre fluxurile de intrare este paralel. Când fluxul rezultat este închis, sunt invocați handlerii de închidere pentru ambele fluxuri de intrare.
număr lung () Returnează numărul de elemente din acest flux. Acesta este un caz special de reducere.
Stream distinct() Returnează un flux format din elemente distincte (conform Object.equals(Object)) ale acestui flux.
Flux static gol () Returnează un Stream secvenţial gol.
Filtru de flux (predicat de predicat) Returnează un flux format din elementele acestui flux care se potrivesc cu predicatul dat.
Opțional findAny() Returnează un Opțional care descrie un element al fluxului sau un Opțional gol dacă fluxul este gol.
Opțional findFirst() Returnează un Opțional care descrie primul element al acestui flux sau un Opțional gol dacă fluxul este gol. Dacă fluxul nu are o ordine de întâlnire, atunci orice element poate fi returnat.
Transmite în flux flatMap (Funcțiacartograf) Returnează un flux format din rezultatele înlocuirii fiecărui element al acestui flux cu conținutul unui flux mapat produs prin aplicarea funcției de mapare furnizată fiecărui element. Fiecare flux mapat este închis după ce conținutul său a fost plasat în acest flux. (Dacă un flux mapat este nul, se folosește un flux gol.)
DoubleStream flatMapToDouble (Mapator de funcții) Returnează un DoubleStream constând din rezultatele înlocuirii fiecărui element al acestui flux cu conținutul unui flux mapat produs prin aplicarea funcției de mapare furnizată fiecărui element. Fiecare flux mapat este închis după ce conținutul său a fost plasat în acest flux. (Dacă un flux mapat este nul, se folosește un flux gol.)
IntStream flatMapToInt(Mapator de funcții) Returnează un IntStream constând din rezultatele înlocuirii fiecărui element al acestui flux cu conținutul unui flux mapat produs prin aplicarea funcției de mapare furnizată fiecărui element. Fiecare flux mapat este închis după ce conținutul său a fost plasat în acest flux. (Dacă un flux mapat este nul, se folosește un flux gol.)
LongStream flatMapToLong (Mapator de funcții) Returnează un LongStream constând din rezultatele înlocuirii fiecărui element al acestui flux cu conținutul unui flux mapat produs prin aplicarea funcției de mapare furnizată fiecărui element. Fiecare flux mapat este închis după ce conținutul său a fost plasat în acest flux. (Dacă un flux mapat este nul, se folosește un flux gol.)
void forEach (acțiunea consumatorului) Efectuează o acțiune pentru fiecare element al acestui flux.
void forEachOrdered (acțiunea consumatorului) Efectuează o acțiune pentru fiecare element al acestui flux, în ordinea de întâlnire a fluxului dacă fluxul are o ordine de întâlnire definită.
Generare flux static (furnizori) Returnează un flux neordonat secvenţial infinit în care fiecare element este generat de Furnizorul furnizat. Acesta este potrivit pentru generarea de fluxuri constante, fluxuri de elemente aleatorii etc.
Iterarea fluxului static (sămânță T, Operator Unary f) Returnează un Stream ordonat secvenţial infinit produs prin aplicarea iterativă a unei funcţii f la un element iniţial sămânţă, producând un Stream format din sămânţă, f(sămânţă), f(f(sămânţă)), etc.
Limită de flux (lung maxSize) Returnează un flux format din elementele acestui flux, trunchiat pentru a nu depăși maxSize în lungime.
Harta fluxului (Mapper funcții) Returnează un flux format din rezultatele aplicării funcției date la elementele acestui flux.
DoubleStream mapToDouble(ToDoubleFunction mapper) Returnează un DoubleStream constând din rezultatele aplicării funcției date la elementele acestui flux.
IntStream mapToInt(ToIntFunction mapper) Returnează un IntStream constând din rezultatele aplicării funcției date la elementele acestui flux.
LongStream mapToLong(ToLongFunction mapper) Returnează un LongStream constând din rezultatele aplicării funcției date la elementele acestui flux.
Opțional max (comparator comparator) Returnează elementul maxim al acestui flux conform Comparatorului furnizat. Acesta este un caz special de reducere.
Opțional min (comparator comparator) Returnează elementul minim al acestui flux conform Comparatorului furnizat. Acesta este un caz special de reducere.
boolean noneMatch(predicat predicat) Returnează elementele acestui flux se potrivesc cu predicatul furnizat. Dacă fluxul este gol, atunci true este returnat și predicatul nu este evaluat.
Flux static @SafeVarargs de (valori T...) Returnează un flux ordonat secvenţial ale cărui elemente sunt valorile specificate.
Flux static de (T t) Returnează un Stream secvenţial care conţine un singur element.
Privire în flux (acțiunea consumatorului) Returnează un flux format din elementele acestui flux, efectuând suplimentar acțiunea furnizată asupra fiecărui element pe măsură ce elementele sunt consumate din fluxul rezultat.
Reduce opțional (acumulator BinaryOperator) Efectuează o reducere a elementelor acestui flux, folosind o funcție de acumulare asociativă și returnează un Opțional care descrie valoarea redusă, dacă există.
T reduce (identitate T, acumulator BinaryOperator) Efectuează o reducere a elementelor acestui flux, folosind valoarea de identitate furnizată și o funcție de acumulare asociativă și returnează valoarea redusă.
U reducere (identitate U, acumulator BiFunction, combinator BinaryOperator) Realizează o reducere a elementelor acestui flux, utilizând identitatea, acumularea și funcțiile de combinare furnizate.
Omiterea fluxului (n lung) Returnează un flux constând din elementele rămase ale acestui flux după eliminarea primelor n elemente ale fluxului. Dacă acest flux conține mai puțin de n elemente, va fi returnat un flux gol.
Flux sortat() Returnează un flux format din elementele acestui flux, sortate după ordinea naturală. Dacă elementele acestui flux nu sunt comparabile, poate fi lansată o excepție java.lang.ClassCastException atunci când este executată operația de terminal.
Flux sortat (comparator comparator) Returnează un flux format din elementele acestui flux, sortate în funcție de Comparatorul furnizat.
Object[] toArray() Returnează o matrice care conține elementele acestui flux.
A[] toArray (generator de funcții int) Returnează o matrice care conține elementele acestui flux, folosind funcția generator furnizată pentru a aloca matricea returnată, precum și orice matrice suplimentare care ar putea fi necesare pentru o execuție partiționată sau pentru redimensionare.

Exemplu Java: filtrarea colecției fără a utiliza Stream

În exemplul următor, filtram datele fără a folosi fluxul. Această abordare este folosită înainte de lansarea pachetului stream.

salvează gimp ca jpeg
 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = new ArrayList(); for(Product product: productsList){ // filtering data of list if(product.price<30000){ productpricelist.add(product.price); adding price to a productpricelist } system.out.println(productpricelist); displaying data < pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0, 28000.0] </pre> <hr> <h3>Java Stream Example: Filtering Collection by using Stream</h3> <p>Here, we are filtering data by using stream. You can see that code is optimized and maintained. Stream provides fast execution.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr> <h3>Java Stream Iterating Example</h3> <p>You can use stream to iterate any number of times. Stream provides predefined methods to deal with the logic you implement. In the following example, we are iterating, filtering and passed a limit to fix the iteration.</p> <pre> import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } </pre> <p> <strong>Output:</strong> </p> <pre> 5 10 15 20 25 </pre> <hr> <h3>Java Stream Example: Filtering and Iterating Collection</h3> <p>In the following example, we are using filter() method. Here, you can see code is optimized and very concise.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Dell Laptop </pre> <hr> <h3>Java Stream Example : reduce() Method in Collection</h3> <p>This method takes a sequence of input elements and combines them into a single summary result by repeated operation. For example, finding the sum of numbers, or accumulating elements into a list. </p> <p>In the following example, we are using reduce() method, which is used to sum of all the product prices.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 201000.0 </pre> <hr> <h3>Java Stream Example: Sum by using Collectors Methods</h3> <p>We can also use collectors to compute sum of numeric values. In the following example, we are using Collectors class and it?s specified methods to compute sum of all the product prices.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 </pre> <hr> <h3>Java Stream Example: Find Max and Min Product Price</h3> <p>Following example finds min and max product price by using stream. It provides convenient way to find values without using imperative approach.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } </pre> <p> <strong>Output:</strong> </p> <pre> 90000.0 25000.0 </pre> <hr> <h3>Java Stream Example: count() Method in Collection</h3> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)></pre></30000){>

Exemplu de flux Java: filtrarea colecției utilizând fluxul

Aici, filtrem datele utilizând fluxul. Puteți vedea că codul este optimizat și menținut. Stream oferă o execuție rapidă.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } 

Ieșire:

 [90000.0] 

Exemplu de iterare a fluxului Java

Puteți folosi fluxul pentru a repeta de câte ori. Stream oferă metode predefinite pentru a face față logicii pe care o implementați. În exemplul următor, repetăm, filtrăm și am trecut o limită pentru a remedia iterația.

 import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } 

Ieșire:

 5 10 15 20 25 

Exemplu de flux Java: colectare de filtrare și iterare

În exemplul următor, folosim metoda filter(). Aici, puteți vedea codul este optimizat și foarte concis.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } 

Ieșire:

 Dell Laptop 

Exemplu de flux Java: metoda reduce() din colecție

Această metodă preia o secvență de elemente de intrare și le combină într-un singur rezultat rezumat prin operație repetată. De exemplu, găsirea sumei numerelor sau acumularea elementelor într-o listă.

În exemplul următor, folosim metoda reduce(), care este folosită pentru a suma tuturor prețurilor produselor.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } 

Ieșire:

 201000.0 201000.0 

Exemplu de flux Java: Sumă utilizând metodele de colectare

De asemenea, putem folosi colectori pentru a calcula suma valorilor numerice. În exemplul următor, folosim clasa Collectors și metodele specificate pentru a calcula suma tuturor prețurilor produselor.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } 

Ieșire:

 201000.0 

Exemplu de flux Java: Găsiți prețul maxim și minim al produsului

Următorul exemplu găsește prețul minim și maxim al produsului utilizând fluxul. Oferă o modalitate convenabilă de a găsi valori fără a utiliza abordarea imperativă.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } 

Ieșire:

 90000.0 25000.0 

Exemplu de flux Java: metoda count() în colecție

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)>

stream vă permite să vă colectați rezultatul în diferite forme. Puteți obține rezultatul ca set, listă sau hartă și puteți efectua manipularea elementelor.


Exemplu de flux Java: Convertiți lista în set

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } 

Ieșire:

 [25000.0, 28000.0] 

Exemplu de flux Java: Convertiți lista în hartă

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } 

Ieșire:

 {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} 

Metodă de referință în flux

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } 

Ieșire:

 [90000.0]