Java nodrošina jaunu papildu pakotni Java 8 ar nosaukumu java.util.stream. Šī pakotne sastāv no klasēm, saskarnēm un enum, kas ļauj elementiem veikt funkcionāla stila darbības. Varat izmantot straumi, importējot pakotni java.util.stream.
Straume nodrošina šādas funkcijas:
- Straumē netiek saglabāti elementi. Tas vienkārši nodod elementus no avota, piemēram, datu struktūras, masīva vai I/O kanāla, izmantojot skaitļošanas operāciju cauruļvadu.
- Straume pēc būtības ir funkcionāla. Straumē veiktās darbības nemaina tās avotu. Piemēram, filtrējot no kolekcijas iegūto straumi, tiek izveidota jauna straume bez filtrētajiem elementiem, nevis tiek noņemti elementi no avota kolekcijas.
- Straume ir slinka un novērtē kodu tikai tad, kad tas ir nepieciešams.
- Straumes elementi tiek apmeklēti tikai vienu reizi straumes dzīves laikā. Tāpat kā iterators, ir jāģenerē jauna straume, lai atkārtoti apmeklētu tos pašus avota elementus.
Varat izmantot straumi, lai filtrētu, apkopotu, drukātu un konvertētu no vienas datu struktūras uz citu utt. Turpmākajos piemēros ar straumes palīdzību esam pielietojuši dažādas darbības.
Java straumes saskarnes metodes
Metodes | Apraksts |
---|---|
Būla allMatch (predikāta predikāts) | Tas atgriež visus šīs straumes elementus, kas atbilst norādītajam predikātam. Ja straume ir tukša, tiek atgriezta taisnība un predikāts netiek novērtēts. |
Būla anyMatch (predikāta predikāts) | Tas atgriež jebkuru šīs straumes elementu, kas atbilst norādītajam predikātam. Ja straume ir tukša, tiek atgriezts false un predikāts netiek novērtēts. |
statiskā Stream.Builder veidotājs() | Tas atgriež straumes veidotāju. |
R savākt (kolekcionāra savācējs) | Tas veic mainīgu samazināšanas darbību šīs straumes elementiem, izmantojot savācēju. Kolekcionārs iekapsulē funkcijas, kas tiek izmantotas kā vākšanas argumenti (Piegādātājs, BiConsumer, BiConsumer), ļaujot atkārtoti izmantot savākšanas stratēģijas un apkopošanas darbības, piemēram, vairāku līmeņu grupēšanu vai sadalīšanu. |
R collection (piegādātāja piegādātājs, BiConsumer akumulators, BiConsumer apvienotājs) | Tas veic mainīgu samazināšanas darbību šīs straumes elementiem. Mainīgs samazinājums ir tāds, kurā samazinātā vērtība ir mainīgs rezultātu konteiners, piemēram, ArrayList, un elementi tiek iekļauti, atjauninot rezultāta stāvokli, nevis aizstājot rezultātu. |
statiskā straumes koncat (straume a, straume b) | Tas rada laiski sasaistītu straumi, kuras elementi ir visi pirmās straumes elementi, kam seko visi otrās straumes elementi. Rezultātā iegūtā straume ir sakārtota, ja ir sakārtotas abas ievades straumes, un paralēla, ja kāda no ievades straumēm ir paralēla. Kad iegūtā straume tiek aizvērta, tiek izsaukti abu ievades straumju aizvēršanas apstrādātāji. |
garš skaitīšana () | Tas atgriež elementu skaitu šajā straumē. Šis ir īpašs samazinājuma gadījums. |
Straumēt atšķirīgi() | Tas atgriež straumi, kas sastāv no atsevišķiem šīs straumes elementiem (saskaņā ar Object.equals(Object)). |
statiskā straume tukša () | Tas atgriež tukšu secīgu straumi. |
Straumes filtrs (predikāta predikāts) | Tas atgriež straumi, kas sastāv no šīs straumes elementiem, kas atbilst dotajam predikātam. |
Neobligāti atrast jebkuru() | Tas atgriež neobligātu, aprakstot kādu straumes elementu, vai tukšu neobligātu, ja straume ir tukša. |
Izvēles findFirst() | Tas atgriež neobligātu, kas apraksta šīs straumes pirmo elementu, vai tukšu neobligātu, ja straume ir tukša. Ja straumei nav sastapšanās secības, var tikt atgriezts jebkurš elements. |
Straumēt flatMap (funkcija super T,? extends Stream>kartētājs) | Tas atgriež straumi, kas sastāv no katra šīs straumes elementa aizstāšanas rezultātiem ar kartētas straumes saturu, kas iegūts, katram elementam piemērojot nodrošināto kartēšanas funkciju. Katra kartētā straume tiek aizvērta pēc tam, kad tās saturs ir ievietots šajā straumē. (Ja kartētās straumes vērtība ir nulle, tā vietā tiek izmantota tukša straume.) |
DoubleStream flatMapToDouble (funkciju kartētājs) | Tas atgriež DoubleStream, kas sastāv no katra šīs straumes elementa aizstāšanas rezultātiem ar kartētas straumes saturu, kas iegūts, katram elementam piemērojot nodrošināto kartēšanas funkciju. Katra kartētā straume tiek aizvērta pēc tam, kad tās saturs ir ievietots šajā straumē. (Ja kartētās straumes vērtība ir nulle, tā vietā tiek izmantota tukša straume.) |
IntStream flatMapToInt (funkciju kartētājs) | Tas atgriež IntStream, kas sastāv no katra šīs straumes elementa aizstāšanas rezultātiem ar kartētas straumes saturu, kas iegūts, katram elementam piemērojot nodrošināto kartēšanas funkciju. Katra kartētā straume tiek aizvērta pēc tam, kad tās saturs ir ievietots šajā straumē. (Ja kartētās straumes vērtība ir nulle, tā vietā tiek izmantota tukša straume.) |
LongStream flatMapToLong (funkciju kartētājs) | Tas atgriež LongStream, kas sastāv no katra šīs straumes elementa aizstāšanas rezultātiem ar kartētas straumes saturu, kas iegūts, katram elementam piemērojot sniegto kartēšanas funkciju. Katra kartētā straume tiek aizvērta pēc tam, kad tās saturs ir ievietots šajā straumē. (Ja kartētās straumes vērtība ir nulle, tā vietā tiek izmantota tukša straume.) |
spēkā neesošs par katru (patērētāja darbība) | Tas veic darbību katram šīs straumes elementam. |
spēkā neesošs par katru pasūtījumu (patērētāja darbība) | Tas veic darbību katram šīs straumes elementam straumes saskarsmes secībā, ja straumei ir noteikta sastapšanās secība. |
statiskās straumes ģenerēšana (piegādātāji) | Tas atgriež bezgalīgu secīgu nesakārtotu straumi, kurā katru elementu ģenerē nodrošinātais Piegādātājs. Tas ir piemērots pastāvīgu straumju, nejaušu elementu straumju u.c. ģenerēšanai. |
statiskā straumes atkārtošana (T sēkla, UnaryOperator f) | Tas atgriež bezgalīgu secīgu sakārtotu straumi, kas iegūta, iteratīvi pielietojot funkciju f sākotnējā elementa sēklai, veidojot straumi, kas sastāv no sākuma, f(sēkla), f(f(sēkla)) utt. |
Straumes ierobežojums (garš maksimālais izmērs) | Tas atgriež straumi, kas sastāv no šīs straumes elementiem, kas ir saīsināti, lai garums nepārsniegtu maxSize. |
Straumes karte (funkciju kartētājs) | Tas atgriež straumi, kas sastāv no rezultātiem, kas iegūti, piemērojot doto funkciju šīs straumes elementiem. |
DoubleStream karteToDouble (ToDoubleFunction kartētājs) | Tas atgriež DoubleStream, kas sastāv no rezultātiem, kas iegūti, piemērojot doto funkciju šīs straumes elementiem. |
IntStream karteToInt(ToIntFunction kartētājs) | Tas atgriež IntStream, kas sastāv no rezultātiem, kas iegūti, piemērojot doto funkciju šīs straumes elementiem. | LongStream karteToLong (ToLongFunction kartētājs) | Tas atgriež LongStream, kas sastāv no rezultātiem, kas iegūti, piemērojot doto funkciju šīs straumes elementiem. |
Izvēles maks (salīdzināšanas līdzeklis) | Tas atgriež maksimālo šīs straumes elementu saskaņā ar sniegto Comparator. Šis ir īpašs samazinājuma gadījums. |
Izvēles min (salīdzināšanas līdzeklis) | Tas atgriež šīs straumes minimālo elementu saskaņā ar sniegto Comparator. Šis ir īpašs samazinājuma gadījums. |
Būla noneMatch (predikāta predikāts) | Tas atgriež šīs straumes elementus, kas atbilst norādītajam predikātam. Ja straume ir tukša, tiek atgriezta taisnība un predikāts netiek novērtēts. |
@SafeVarargs statiskā straume (T... vērtības) | Tas atgriež secīgu sakārtotu straumi, kuras elementi ir norādītās vērtības. |
statiskā straume (T t) | Tas atgriež secīgu straumi, kurā ir viens elements. |
Straumes apskate (patērētāju darbība) | Tas atgriež straumi, kas sastāv no šīs straumes elementiem, papildus veicot paredzēto darbību katram elementam, jo elementi tiek patērēti no iegūtās straumes. |
Pēc izvēles samazināšana (BinaryOperator akumulators) | Tas veic šīs straumes elementu samazināšanu, izmantojot asociatīvās uzkrāšanas funkciju, un atgriež opciju Neobligāti, aprakstot samazināto vērtību, ja tāda ir. |
T samazināt (T identitāte, BinaryOperator akumulators) | Tas veic šīs straumes elementu samazināšanu, izmantojot norādīto identitātes vērtību un asociatīvās uzkrāšanas funkciju, un atgriež samazināto vērtību. |
U samazināšana (U identitāte, BiFunction akumulators, BinaryOperator apvienotājs) | Tas veic šīs plūsmas elementu samazināšanu, izmantojot sniegtās identitātes, uzkrāšanas un apvienošanas funkcijas. |
Straumes izlaišana (garums n) | Tas atgriež straumi, kas sastāv no atlikušajiem šīs straumes elementiem pēc pirmo n straumes elementu atmešanas. Ja šajā straumē ir mazāk par n elementiem, tiks atgriezta tukša straume. |
Straume sakārtota() | Tas atgriež straumi, kas sastāv no šīs straumes elementiem, kas sakārtoti atbilstoši dabiskajai secībai. Ja šīs straumes elementi nav salīdzināmi, termināļa darbības izpildes laikā var tikt izmests java.lang.ClassCastException. |
Straume sakārtota (salīdzināšanas līdzeklis) | Tas atgriež straumi, kas sastāv no šīs straumes elementiem, kas sakārtoti atbilstoši nodrošinātajam salīdzinājumam. |
Object[] toArray() | Tas atgriež masīvu, kurā ir šīs straumes elementi. |
A[] toArray (IntFunction ģenerators) | Tas atgriež masīvu, kurā ir šīs straumes elementi, izmantojot nodrošināto ģeneratora funkciju, lai piešķirtu atgriezto masīvu, kā arī visus papildu masīvus, kas varētu būt nepieciešami sadalītai izpildei vai izmēru maiņai. |
Java piemērs: kolekcijas filtrēšana, neizmantojot straumi
Nākamajā piemērā mēs filtrējam datus, neizmantojot straumi. Šo pieeju mēs izmantojām pirms straumes pakotnes izlaišanas.
cast sql
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->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->element+1) .filter(element->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> 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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > 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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 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){>
Java straumes piemērs: kolekcijas filtrēšana, izmantojot straumi
Šeit mēs filtrējam datus, izmantojot straumi. Jūs varat redzēt, ka kods ir optimizēts un uzturēts. Straume nodrošina ātru izpildi.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } }
Izvade:
[90000.0]
Java straumes atkārtošanas piemērs
Varat izmantot straumi, lai atkārtotu neierobežotu skaitu reižu. Straume nodrošina iepriekš definētas metodes, kā rīkoties ar ieviesto loģiku. Nākamajā piemērā mēs atkārtojam, filtrējam un esam nokārtojuši ierobežojumu, lai labotu iterāciju.
import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element->element+1) .filter(element->element%5==0) .limit(5) .forEach(System.out::println); } }
Izvade:
5 10 15 20 25
Java straumes piemērs: filtrēšanas un atkārtošanas kolekcija
Nākamajā piemērā mēs izmantojam filtru () metodi. Šeit jūs varat redzēt, ka kods ir optimizēts un ļoti kodolīgs.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> System.out.println(product.name)); } }
Izvade:
Dell Laptop
Java straumes piemērs: samazināt() metode kolekcijā
Šī metode izmanto ievades elementu secību un apvieno tos vienā kopsavilkuma rezultātā, veicot atkārtotu darbību. Piemēram, skaitļu summas atrašana vai elementu uzkrāšana sarakstā.
Nākamajā piemērā mēs izmantojam samazinājuma () metodi, kas tiek izmantota visu produktu cenu summēšanai.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } }
Izvade:
201000.0 201000.0
Java straumes piemērs: summa, izmantojot kolekciju metodes
Mēs varam arī izmantot kolektorus, lai aprēķinātu skaitlisko vērtību summu. Nākamajā piemērā mēs izmantojam Collectors klasi un tajā norādītās metodes, lai aprēķinātu visu produktu cenu summu.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->product.price)); System.out.println(totalPrice3); } }
Izvade:
201000.0
Java straumes piemērs: atrodiet produkta maksimālo un minimālo cenu
Tālāk sniegtajā piemērā tiek atrasta produkta minimālā un maksimālā cena, izmantojot straumi. Tas nodrošina ērtu veidu, kā atrast vērtības, neizmantojot obligātu pieeju.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productB.price); } }
Izvade:
90000.0 25000.0
Java straumes piemērs: count() metode kolekcijā
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 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)>
straume ļauj apkopot rezultātus jebkurā dažādās formās. Jūs varat iegūt rezultātu kā kopu, sarakstu vai karti un var veikt manipulācijas ar elementiem.
Java straumes piemērs: pārveidojiet sarakstu par komplektu
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } }
Izvade:
[25000.0, 28000.0]
Java straumes piemērs: pārveidojiet sarakstu par karti
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } }
Izvade:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
Metodes atsauce straumē
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } }
Izvade:
[90000.0]
30000)>30000){>