Java gir en ny tilleggspakke i Java 8 kalt java.util.stream. Denne pakken består av klasser, grensesnitt og enum for å tillate funksjonelle operasjoner på elementene. Du kan bruke stream ved å importere java.util.stream-pakken.
Stream gir følgende funksjoner:
- Stream lagrer ikke elementer. Den formidler ganske enkelt elementer fra en kilde som en datastruktur, en matrise eller en I/O-kanal, gjennom en pipeline av beregningsoperasjoner.
- Stream er funksjonell i naturen. Operasjoner utført på en strøm endrer ikke dens kilde. For eksempel, filtrering av en strøm hentet fra en samling produserer en ny strøm uten de filtrerte elementene, i stedet for å fjerne elementer fra kildesamlingen.
- Stream er lat og evaluerer kode bare når det er nødvendig.
- Elementene i en bekk besøkes bare én gang i løpet av en bekks levetid. Som en iterator, må en ny strøm genereres for å se de samme elementene i kilden på nytt.
Du kan bruke stream til å filtrere, samle inn, skrive ut og konvertere fra én datastruktur til en annen osv. I de følgende eksemplene har vi brukt ulike operasjoner ved hjelp av stream.
Java-strømgrensesnittmetoder
Metoder | Beskrivelse |
---|---|
boolesk allMatch(predikatpredikat) | Den returnerer alle elementene i denne strømmen som samsvarer med det angitte predikatet. Hvis strømmen er tom, returneres true og predikatet blir ikke evaluert. |
boolesk anyMatch(predikatpredikat) | Den returnerer ethvert element i denne strømmen som samsvarer med det angitte predikatet. Hvis strømmen er tom, returneres false og predikatet blir ikke evaluert. |
statisk Stream.Builder-bygger() | Den returnerer en bygger for en strøm. |
R collect (samlersamler) | Den utfører en foranderlig reduksjonsoperasjon på elementene i denne strømmen ved hjelp av en samler. En samler innkapsler funksjonene som brukes som argumenter for å samle (Supplier, BiConsumer, BiConsumer), noe som muliggjør gjenbruk av innsamlingsstrategier og sammensetning av innsamlingsoperasjoner som gruppering på flere nivåer eller partisjonering. |
R collect (leverandørleverandør, BiConsumer akkumulator, BiConsumer combiner) | Den utfører en foranderlig reduksjonsoperasjon på elementene i denne strømmen. En mutbar reduksjon er en der den reduserte verdien er en mutbar resultatbeholder, for eksempel en ArrayList, og elementer er inkorporert ved å oppdatere statusen til resultatet i stedet for å erstatte resultatet. |
statisk strømkonkat (strøm a, strøm b) | Det skaper en dovent sammenkoblet strøm hvis elementer er alle elementene i den første strømmen etterfulgt av alle elementene i den andre strømmen. Den resulterende strømmen er ordnet hvis begge inngangsstrømmene er ordnet, og parallell hvis en av inngangsstrømmene er parallelle. Når den resulterende strømmen er lukket, påkalles nærbehandlerne for begge inngangsstrømmene. |
lang telling() | Den returnerer antallet elementer i denne strømmen. Dette er et spesielt tilfelle av reduksjon. |
Strøm distinkt() | Den returnerer en strøm som består av de distinkte elementene (i henhold til Object.equals(Object)) i denne strømmen. |
statisk strøm er tom() | Den returnerer en tom sekvensiell strøm. |
Strømfilter (predikatpredikat) | Den returnerer en strøm som består av elementene i denne strømmen som samsvarer med det gitte predikatet. |
Valgfri findAny() | Den returnerer et valgfritt som beskriver et element i strømmen, eller et tomt valgfritt hvis strømmen er tom. |
Valgfri findFirst() | Den returnerer et valgfritt som beskriver det første elementet i denne strømmen, eller et tomt valgfritt hvis strømmen er tom. Hvis strømmen ikke har noen møterekkefølge, kan ethvert element returneres. |
Stream flatMap(Funksjon super T,? extends Stream>kartlegger) | Den returnerer en strøm som består av resultatene av å erstatte hvert element i denne strømmen med innholdet i en kartlagt strøm produsert ved å bruke den angitte kartfunksjonen på hvert element. Hver kartlagt strøm stenges etter at innholdet er plassert i denne strømmen. (Hvis en kartlagt strøm er null, brukes en tom strøm i stedet.) |
DoubleStream flatMapToDouble(Funksjonskartlegging) | Den returnerer en DoubleStream som består av resultatene av å erstatte hvert element i denne strømmen med innholdet i en kartlagt strøm produsert ved å bruke den medfølgende tilordningsfunksjonen på hvert element. Hver tilordnede strøm stenges etter at innholdet er plassert i denne strømmen. (Hvis en kartlagt strøm er null, brukes en tom strøm i stedet.) |
IntStream flatMapToInt(Funksjonskartlegging) | Den returnerer en IntStream som består av resultatene av å erstatte hvert element i denne strømmen med innholdet i en kartlagt strøm produsert ved å bruke den medfølgende tilordningsfunksjonen på hvert element. Hver kartlagt strøm stenges etter at innholdet er plassert i denne strømmen. (Hvis en kartlagt strøm er null, brukes en tom strøm i stedet.) |
LongStream flatMapToLong(Funksjonskartlegging) | Den returnerer en LongStream som består av resultatene av å erstatte hvert element i denne strømmen med innholdet i en kartlagt strøm produsert ved å bruke den medfølgende kartleggingsfunksjonen på hvert element. Hver kartlagt strøm stenges etter at innholdet er plassert i denne strømmen. (Hvis en kartlagt strøm er null, brukes en tom strøm i stedet.) |
void forEach (forbrukerhandling) | Den utfører en handling for hvert element i denne strømmen. |
void forEachOrdered (forbrukerhandling) | Den utfører en handling for hvert element i denne strømmen, i møterekkefølgen til strømmen hvis strømmen har en definert møterekkefølge. |
statisk strømgenerering (leverandører) | Den returnerer en uendelig sekvensiell uordnet strøm der hvert element genereres av den oppgitte leverandøren. Dette er egnet for å generere konstante strømmer, strømmer av tilfeldige elementer, etc. |
statisk strøm iterasjon (T frø, UnaryOperator f) | Den returnerer en uendelig sekvensielt ordnet strøm produsert ved iterativ applikasjon av en funksjon f til et startelementfrø, og produserer en strøm bestående av frø, f(frø), f(f(frø)), etc. |
Strømgrense (lang maks. størrelse) | Den returnerer en strøm som består av elementene i denne strømmen, avkortet slik at den ikke er lengre enn maxSize i lengden. |
Strømkart (Funksjonskartlegger) | Den returnerer en strøm som består av resultatene av å bruke den gitte funksjonen på elementene i denne strømmen. |
DoubleStream mapToDouble(ToDoubleFunction kartlegger) | Den returnerer en DoubleStream som består av resultatene av å bruke den gitte funksjonen på elementene i denne strømmen. |
IntStream mapToInt(ToIntFunction kartlegger) | Den returnerer en IntStream som består av resultatene av å bruke den gitte funksjonen på elementene i denne strømmen. | LongStream mapToLong(ToLongFunction kartlegger) | Den returnerer en LongStream som består av resultatene av å bruke den gitte funksjonen på elementene i denne strømmen. |
Valgfri maks (komparator komparator) | Den returnerer det maksimale elementet i denne strømmen i henhold til den medfølgende komparatoren. Dette er et spesielt tilfelle av reduksjon. |
Valgfri min (komparator komparator) | Den returnerer minimumselementet i denne strømmen i henhold til den medfølgende komparatoren. Dette er et spesielt tilfelle av reduksjon. |
boolesk noneMatch(predikatpredikat) | Den returnerer elementer i denne strømmen som samsvarer med det angitte predikatet. Hvis strømmen er tom, returneres true og predikatet blir ikke evaluert. |
@SafeVarargs statisk strøm av (T... verdier) | Den returnerer en sekvensielt ordnet strøm hvis elementer er de spesifiserte verdiene. |
statisk strøm av (T t) | Den returnerer en sekvensiell strøm som inneholder et enkelt element. |
Strømkikk (forbrukerhandling) | Den returnerer en strøm som består av elementene i denne strømmen, og utfører i tillegg den angitte handlingen på hvert element etter hvert som elementene forbrukes fra den resulterende strømmen. |
Valgfri reduksjon (BinaryOperator akkumulator) | Den utfører en reduksjon på elementene i denne strømmen, ved å bruke en assosiativ akkumuleringsfunksjon, og returnerer en valgfri som beskriver den reduserte verdien, hvis noen. |
T redusere (T-identitet, BinaryOperator-akkumulator) | Den utfører en reduksjon på elementene i denne strømmen ved å bruke den angitte identitetsverdien og en assosiativ akkumuleringsfunksjon, og returnerer den reduserte verdien. |
U redusere (U-identitet, BiFunction-akkumulator, BinaryOperator-kombinator) | Den utfører en reduksjon på elementene i denne strømmen, ved å bruke den angitte identiteten, akkumulerings- og kombinasjonsfunksjonene. |
Hopp over strøm (lang n) | Den returnerer en strøm som består av de gjenværende elementene i denne strømmen etter å ha forkastet de første n elementene i strømmen. Hvis denne strømmen inneholder færre enn n elementer, vil en tom strøm bli returnert. |
Strøm sortert() | Den returnerer en bekk som består av elementene i denne strømmen, sortert etter naturlig rekkefølge. Hvis elementene i denne strømmen ikke er sammenlignbare, kan en java.lang.ClassCastException bli kastet når terminaloperasjonen utføres. |
Strømsortert (komparator komparator) | Den returnerer en strøm som består av elementene i denne strømmen, sortert i henhold til den angitte komparatoren. |
Objekt[] tilArray() | Den returnerer en matrise som inneholder elementene i denne strømmen. |
A[] toArray(IntFunction generator) | Den returnerer en matrise som inneholder elementene i denne strømmen, ved å bruke den medfølgende generatorfunksjonen for å tildele den returnerte matrisen, så vel som eventuelle ekstra matriser som kan være nødvendig for en partisjonert utførelse eller for å endre størrelse. |
Java Eksempel: Filtrering av samling uten å bruke Stream
I det følgende eksempelet filtrerer vi data uten å bruke strøm. Denne tilnærmingen ble vi brukt før streampakken ble utgitt.
centos vs rhel
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 Stream Eksempel: Filtrering av samling ved å bruke Stream
Her filtrerer vi data ved å bruke strøm. Du kan se at koden er optimalisert og vedlikeholdt. Stream gir rask utførelse.
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); } }
Produksjon:
[90000.0]
Java Stream Iterating Eksempel
Du kan bruke strøm til å iterere et hvilket som helst antall ganger. Stream gir forhåndsdefinerte metoder for å håndtere logikken du implementerer. I det følgende eksempelet itererer, filtrerer vi og passerte en grense for å fikse iterasjonen.
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); } }
Produksjon:
5 10 15 20 25
Java Stream Eksempel: Filtrering og gjentakelse av samling
I det følgende eksempelet bruker vi filter()-metoden. Her kan du se at koden er optimalisert og veldig kortfattet.
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)); } }
Produksjon:
Dell Laptop
Java Stream Eksempel: reduce() Metode i samling
Denne metoden tar en sekvens av inndataelementer og kombinerer dem til et enkelt sammendragsresultat ved gjentatt operasjon. For eksempel å finne summen av tall, eller akkumulere elementer i en liste.
I det følgende eksempelet bruker vi reduce()-metoden, som brukes til å summere alle produktprisene.
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); } }
Produksjon:
201000.0 201000.0
Java Stream Eksempel: Sum ved å bruke samlermetoder
Vi kan også bruke samlere til å beregne summen av numeriske verdier. I det følgende eksempelet bruker vi Collectors-klassen og dens spesifiserte metoder for å beregne summen av alle produktprisene.
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); } }
Produksjon:
201000.0
Java Stream Eksempel: Finn maks og minimum produktpris
Følgende eksempel finner min og maks produktpris ved å bruke strøm. Det gir en praktisk måte å finne verdier uten å bruke tvingende tilnærming.
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); } }
Produksjon:
90000.0 25000.0
Java Stream Eksempel: count() Metode i samling
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)>
stream lar deg samle resultatet i ulike former. Du kan få resultatet som sett, liste eller kart og kan utføre manipulasjon på elementene.
Java Stream Eksempel: Konverter liste til sett
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); } }
Produksjon:
[25000.0, 28000.0]
Java Stream Eksempel: Konverter liste til kart
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); } }
Produksjon:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
Metodereferanse i strøm
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); } }
Produksjon:
[90000.0]
30000)>30000){>