logo

Java 8 Stream

Java ponuja nov dodatni paket v Javi 8, imenovan java.util.stream. Ta paket je sestavljen iz razredov, vmesnikov in enumov, ki omogočajo operacije v funkcionalnem slogu na elementih. Tok lahko uporabite tako, da uvozite paket java.util.stream.


Stream ponuja naslednje funkcije:

  • Stream ne shranjuje elementov. Preprosto posreduje elemente iz vira, kot je podatkovna struktura, polje ali V/I kanal, skozi cevovod računalniških operacij.
  • Stream je funkcionalne narave. Operacije, izvedene na toku, ne spremenijo njegovega vira. Na primer, filtriranje toka, pridobljenega iz zbirke, proizvede nov tok brez filtriranih elementov, namesto da bi odstranili elemente iz izvorne zbirke.
  • Stream je len in ovrednoti kodo le, ko je to potrebno.
  • Elemente toka obiščemo le enkrat v življenju toka. Tako kot Iterator je treba ustvariti nov tok, da ponovno obišče iste elemente vira.

Tok lahko uporabite za filtriranje, zbiranje, tiskanje in pretvorbo iz ene podatkovne strukture v drugo itd. V naslednjih primerih smo uporabili različne operacije s pomočjo toka.

Metode vmesnika Java Stream

Metode Opis
boolean allMatch(predikat predikat) Vrne vse elemente tega toka, ki se ujemajo s podanim predikatom. Če je tok prazen, se vrne true in predikat ni ovrednoten.
boolean anyMatch(predikat predikat) Vrne kateri koli element tega toka, ki se ujema s podanim predikatom. Če je tok prazen, se vrne false in predikat ni ovrednoten.
statični Stream.Builder builder() Vrne graditelj za tok.
R collect (zbiralni zbiralnik) Izvaja operacijo spremenljive redukcije na elementih tega toka z uporabo zbiralnika. Zbiralnik enkapsulira funkcije, ki se uporabljajo kot argumenti za zbiranje (Dobavitelj, BiPorabnik, BiPorabnik), kar omogoča ponovno uporabo strategij zbiranja in sestavo operacij zbiranja, kot je večnivojsko združevanje ali particioniranje.
R collect (Dobavitelj dobavitelj, BiConsumer akumulator, BiConsumer combiner) Na elementih tega toka izvede operacijo spremenljive redukcije. Spremenljivo zmanjšanje je tisto, pri katerem je zmanjšana vrednost spremenljiv vsebnik rezultatov, kot je ArrayList, elementi pa so vključeni s posodobitvijo stanja rezultata in ne z zamenjavo rezultata.
statični Stream concat(Stream a, Stream b) Ustvari leno povezan tok, katerega elementi so vsi elementi prvega toka, ki jim sledijo vsi elementi drugega toka. Nastali tok je urejen, če sta urejena oba vhodna toka, in vzporeden, če je kateri koli od vhodnih tokov vzporeden. Ko se nastali tok zapre, se prikličejo zapiralni upravljalniki za oba vhodna toka.
dolgo štetje() Vrne število elementov v tem toku. To je poseben primer znižanja.
Stream distinct() Vrne tok, sestavljen iz različnih elementov (v skladu z Object.equals(Object)) tega toka.
statični tok prazen() Vrne prazen zaporedni tok.
Filter toka (predikat predikat) Vrne tok, sestavljen iz elementov tega toka, ki se ujemajo z danim predikatom.
Izbirno findAny() Vrne izbirno, ki opisuje nek element toka, ali prazno izbirno, če je tok prazen.
Izbirno findFirst() Vrne izbirno, ki opisuje prvi element tega toka, ali prazno izbirno, če je tok prazen. Če tok nima vrstnega reda srečanj, se lahko vrne kateri koli element.
Stream flatMap(funkcijamaper) Vrne tok, sestavljen iz rezultatov zamenjave vsakega elementa tega toka z vsebino preslikanega toka, ki nastane z uporabo ponujene funkcije preslikave za vsak element. Vsak preslikan tok se zapre, ko je njegova vsebina postavljena v ta tok. (Če je preslikani tok nič, se namesto tega uporabi prazen tok.)
DoubleStream flatMapToDouble (preslikava funkcij) Vrne DoubleStream, sestavljen iz rezultatov zamenjave vsakega elementa tega toka z vsebino preslikanega toka, ki nastane z uporabo ponujene funkcije preslikave za vsak element. Vsak preslikan tok se zapre, ko je njegova vsebina postavljena v ta tok. (Če je preslikani tok nič, se namesto tega uporabi prazen tok.)
IntStream flatMapToInt(preslikava funkcij) Vrne IntStream, sestavljen iz rezultatov zamenjave vsakega elementa tega toka z vsebino preslikanega toka, ki nastane z uporabo ponujene funkcije preslikave za vsak element. Vsak preslikan tok se zapre, ko je njegova vsebina postavljena v ta tok. (Če je preslikani tok nič, se namesto tega uporabi prazen tok.)
LongStream flatMapToLong (preslikava funkcij) Vrne LongStream, sestavljen iz rezultatov zamenjave vsakega elementa tega toka z vsebino preslikanega toka, ki nastane z uporabo ponujene funkcije preslikave za vsak element. Vsak preslikan tok se zapre, ko je njegova vsebina postavljena v ta tok. (Če je preslikani tok nič, se namesto tega uporabi prazen tok.)
void forEach(dejanje potrošnika) Izvede dejanje za vsak element tega toka.
void forEachOrdered(ukrep potrošnika) Izvede dejanje za vsak element tega toka v vrstnem redu srečanj toka, če ima tok definiran vrstni red srečanj.
ustvarjanje statičnega toka (dobavitelji) Vrne neskončen zaporedni neurejen tok, kjer vsak element generira navedeni dobavitelj. To je primerno za generiranje stalnih tokov, tokov naključnih elementov itd.
statično ponavljanje toka (T seme, UnaryOperator f) Vrne neskončni zaporedni urejeni tok, ustvarjen z iterativno uporabo funkcije f na začetno seme elementa, pri čemer proizvede tok, sestavljen iz semena, f(seme), f(f(seme)) itd.
Omejitev toka (dolga največja velikost) Vrne tok, sestavljen iz elementov tega toka, prisekanih tako, da niso daljši od maxSize.
Preslikava toka (preslikava funkcij) Vrne tok, sestavljen iz rezultatov uporabe dane funkcije za elemente tega toka.
DoubleStream mapToDouble(ToDoubleFunction preslikava) Vrne DoubleStream, sestavljen iz rezultatov uporabe dane funkcije za elemente tega toka.
IntStream mapToInt(ToIntFunction preslikava) Vrne IntStream, sestavljen iz rezultatov uporabe dane funkcije za elemente tega toka.
LongStream mapToLong(ToLongFunction preslikava) Vrne LongStream, sestavljen iz rezultatov uporabe dane funkcije za elemente tega toka.
Izbirni maks. (primerjalni primerjalnik) Vrne največji element tega toka glede na podani primerjalnik. To je poseben primer znižanja.
Izbirni min (primerjalni primerjalnik) Vrne najmanjši element tega toka glede na podani primerjalnik. To je poseben primer znižanja.
boolean noneMatch(predikat predikat) Vrne elemente tega toka, ki se ujemajo s podanim predikatom. Če je tok prazen, se vrne true in predikat ni ovrednoten.
@SafeVarargs statični tok (vrednosti T...) Vrne zaporedni urejen tok, katerega elementi so navedene vrednosti.
statični tok (T t) Vrne zaporedni tok, ki vsebuje en sam element.
Pokukanje v tok (dejanje potrošnika) Vrne tok, ki je sestavljen iz elementov tega toka, poleg tega pa izvede določeno dejanje za vsak element, ko se elementi porabijo iz nastalega toka.
Izbirno zmanjšanje (BinaryOperator akumulator) Izvede redukcijo elementov tega toka z uporabo funkcije asociativnega kopičenja in vrne izbirno možnost, ki opisuje zmanjšano vrednost, če obstaja.
T reducirati (identiteta T, akumulator binarnega operaterja) Izvede redukcijo elementov tega toka z uporabo podane vrednosti identitete in asociativne akumulacijske funkcije ter vrne zmanjšano vrednost.
U reducirati (U identiteta, BiFunction akumulator, BinaryOperator combiner) Izvaja redukcijo elementov tega toka z uporabo ponujenih funkcij identitete, kopičenja in združevanja.
Preskok toka (dolg n) Vrne tok, sestavljen iz preostalih elementov tega toka, potem ko je zavrgel prvih n elementov toka. Če ta tok vsebuje manj kot n elementov, bo vrnjen prazen tok.
Tok razvrščen() Vrne tok, sestavljen iz elementov tega toka, razvrščenih po naravnem vrstnem redu. Če elementi tega toka niso primerljivi, se lahko vrže izjema java.lang.ClassCastException, ko se izvede operacija terminala.
Tok razvrščen (primerjalnik primerjalnika) Vrne tok, sestavljen iz elementov tega toka, razvrščenih glede na podani primerjalnik.
Objekt[] vArray() Vrne matriko, ki vsebuje elemente tega toka.
A[] toArray(generator IntFunction) Vrne matriko, ki vsebuje elemente tega toka, z uporabo ponujene funkcije generatorja za dodelitev vrnjene matrike, pa tudi vseh dodatnih matrik, ki bi lahko bile potrebne za particionirano izvajanje ali za spreminjanje velikosti.

Primer Java: Filtriranje zbirke brez uporabe Stream

V naslednjem primeru filtriramo podatke brez uporabe toka. Ta pristop smo uporabljali, preden je bil izdan pretočni paket.

testiranje delovanja
 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){>

Primer Java Stream: Filtriranje zbirke z uporabo Stream

Tukaj filtriramo podatke z uporabo toka. Vidite lahko, da je koda optimizirana in vzdrževana. Stream zagotavlja hitro izvedbo.

 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); } } 

Izhod:

 [90000.0] 

Primer ponovitve Java Stream

Tok lahko uporabite za poljubno število ponovitev. Stream ponuja vnaprej določene metode za obravnavo logike, ki jo izvajate. V naslednjem primeru ponavljamo, filtriramo in posredujemo omejitev, da popravimo ponovitev.

 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); } } 

Izhod:

 5 10 15 20 25 

Primer Java Stream: Filtriranje in ponavljanje zbirke

V naslednjem primeru uporabljamo metodo filter(). Tukaj lahko vidite, da je koda optimizirana in zelo jedrnata.

 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)); } } 

Izhod:

 Dell Laptop 

Primer toka Java: metoda reduce() v zbirki

Ta metoda vzame zaporedje vhodnih elementov in jih s ponovljeno operacijo združi v en sam rezultat povzetka. Na primer iskanje vsote števil ali kopičenje elementov v seznam.

V naslednjem primeru uporabljamo metodo reduce(), ki se uporablja za seštevek vseh cen izdelkov.

 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); } } 

Izhod:

 201000.0 201000.0 

Primer Java Stream: seštejte z uporabo metod zbiralcev

Za izračun vsote številskih vrednosti lahko uporabimo tudi zbiralnike. V naslednjem primeru uporabljamo razred Collectors in njegove določene metode za izračun vsote vseh cen izdelkov.

 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); } } 

Izhod:

 201000.0 

Primer Java Stream: Poiščite najvišjo in najnižjo ceno izdelka

Naslednji primer najde najnižjo in najvišjo ceno izdelka z uporabo toka. Zagotavlja priročen način za iskanje vrednosti brez uporabe imperativnega pristopa.

 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); } } 

Izhod:

 90000.0 25000.0 

Primer toka Java: metoda count() v zbirki

 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)>

tok vam omogoča zbiranje rezultatov v različnih oblikah. Rezultat lahko dobite kot niz, seznam ali zemljevid in lahko izvajate manipulacije z elementi.


Primer Java Stream : Pretvori seznam v 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); } } 

Izhod:

 [25000.0, 28000.0] 

Primer Java Stream : Pretvori seznam v zemljevid

 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); } } 

Izhod:

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

Referenca metode v toku

 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); } } 

Izhod:

 [90000.0]