Java giver en ny ekstra pakke i Java 8 kaldet java.util.stream. Denne pakke består af klasser, grænseflader og enum for at tillade funktionelle handlinger på elementerne. Du kan bruge stream ved at importere java.util.stream-pakken.
Stream giver følgende funktioner:
- Stream gemmer ikke elementer. Det formidler simpelthen elementer fra en kilde, såsom en datastruktur, et array eller en I/O-kanal, gennem en pipeline af beregningsoperationer.
- Stream er funktionel i naturen. Handlinger udført på en stream ændrer ikke dens kilde. Filtrering af en Stream opnået fra en samling producerer f.eks. en ny Stream uden de filtrerede elementer i stedet for at fjerne elementer fra kildesamlingen.
- Stream er doven og evaluerer kun kode, når det kræves.
- Elementerne i et vandløb besøges kun én gang i løbet af et vandløbs levetid. Ligesom en iterator skal en ny strøm genereres for at gense de samme elementer i kilden.
Du kan bruge stream til at filtrere, indsamle, udskrive og konvertere fra én datastruktur til en anden osv. I de følgende eksempler har vi anvendt forskellige operationer ved hjælp af stream.
Java Stream Interface metoder
Metoder | Beskrivelse |
---|---|
boolean allMatch(prædikatprædikat) | Det returnerer alle elementer i denne strøm, som matcher det angivne prædikat. Hvis strømmen er tom, returneres sand, og prædikatet evalueres ikke. |
boolean anyMatch(prædikatprædikat) | Det returnerer ethvert element i denne strøm, der matcher det angivne prædikat. Hvis strømmen er tom, returneres false, og prædikatet evalueres ikke. |
statisk Stream.Builder builder() | Det returnerer en builder til en Stream. |
R collect (Collector collector) | Den udfører en foranderlig reduktionsoperation på elementerne i denne strøm ved hjælp af en Collector. En Collector indkapsler de funktioner, der bruges som argumenter til at indsamle (Supplier, BiConsumer, BiConsumer), hvilket giver mulighed for genbrug af indsamlingsstrategier og sammensætning af indsamlingsoperationer såsom gruppering på flere niveauer eller partitionering. |
R collect (leverandørleverandør, BiConsumer akkumulator, BiConsumer combiner) | Den udfører en foranderlig reduktionsoperation på elementerne i denne strøm. En foranderlig reduktion er en, hvor den reducerede værdi er en foranderlig resultatbeholder, såsom en ArrayList, og elementer er inkorporeret ved at opdatere status for resultatet i stedet for at erstatte resultatet. |
statisk strømkonkat (strøm a, strøm b) | Det skaber en dovent sammenkædet strøm, hvis elementer er alle elementerne i den første strøm efterfulgt af alle elementerne i den anden strøm. Den resulterende strøm er ordnet, hvis begge inputstrømmene er ordnet, og parallel, hvis en af inputstrømmene er parallel. Når den resulterende strøm er lukket, aktiveres de lukkede behandlere for begge inputstrømme. |
lang tælling () | Det returnerer antallet af elementer i denne strøm. Dette er et særligt tilfælde af en reduktion. |
Stream distinct() | Det returnerer en strøm, der består af de forskellige elementer (ifølge Object.equals(Object)) af denne strøm. |
statisk strøm tom() | Det returnerer en tom sekventiel Stream. |
Strømfilter (prædikatprædikat) | Det returnerer en strøm, der består af elementerne i denne strøm, der matcher det givne prædikat. |
Valgfri findAny() | Den returnerer en valgfri, der beskriver et element i strømmen, eller en tom valgfri, hvis strømmen er tom. |
Valgfri findFirst() | Den returnerer en valgfri, der beskriver det første element i denne strøm, eller en tom valgfri, hvis strømmen er tom. Hvis streamen ikke har nogen møderækkefølge, kan ethvert element returneres. |
Stream flatMap(Funktion super T,? extends Stream>kortlægger) | Den returnerer en strøm, der består af resultaterne af at erstatte hvert element i denne strøm med indholdet af en kortlagt strøm, der er produceret ved at anvende den medfølgende kortlægningsfunktion på hvert element. Hver kortlagt strøm lukkes, efter dens indhold er blevet placeret i denne strøm. (Hvis en kortlagt strøm er nul, bruges en tom strøm i stedet). |
DoubleStream flatMapToDouble(Funktionsmapper) | Det returnerer en DoubleStream, der består af resultaterne af at erstatte hvert element i denne strøm med indholdet af en kortlagt strøm, der er produceret ved at anvende den medfølgende kortlægningsfunktion på hvert element. Hver kortlagt strøm lukkes, efter at dens indhold er placeret i denne strøm. (Hvis en kortlagt strøm er nul, bruges en tom strøm i stedet). |
IntStream flatMapToInt(Funktionsmapper) | Det returnerer en IntStream, der består af resultaterne af at erstatte hvert element i denne strøm med indholdet af en kortlagt strøm, der er produceret ved at anvende den medfølgende kortlægningsfunktion til hvert element. Hver kortlagt strøm lukkes, efter dens indhold er blevet placeret i denne strøm. (Hvis en kortlagt strøm er nul, bruges en tom strøm i stedet). |
LongStream flatMapToLong(Funktionsmapper) | Den returnerer en LongStream, der består af resultaterne af at erstatte hvert element i denne strøm med indholdet af en kortlagt strøm, der er produceret ved at anvende den medfølgende kortlægningsfunktion til hvert element. Hver kortlagt strøm lukkes, efter dens indhold er blevet placeret i denne strøm. (Hvis en kortlagt strøm er nul, bruges en tom strøm i stedet). |
void forEach (Forbrugerhandling) | Den udfører en handling for hvert element i denne strøm. |
void forEachOrdered(Forbrugerhandling) | Den udfører en handling for hvert element i denne strøm, i strømmens møderækkefølge, hvis strømmen har en defineret møderækkefølge. |
statisk strømgenerering (leverandører) | Det returnerer en uendelig sekventiel uordnet strøm, hvor hvert element er genereret af den leverede leverandør. Dette er velegnet til at generere konstante strømme, strømme af tilfældige elementer osv. |
statisk stream iteration (T frø, UnaryOperator f) | Den returnerer en uendelig sekventiel ordnet strøm produceret ved iterativ anvendelse af en funktion f til et indledende element seed, der producerer en strøm bestående af seed, f(seed), f(f(seed)) osv. |
Streamgrænse (lang maks. størrelse) | Det returnerer en strøm, der består af elementerne i denne strøm, afkortet til ikke at være længere end maxSize i længden. |
Stream kort (funktionsmapper) | Det returnerer en strøm, der består af resultaterne af at anvende den givne funktion på elementerne i denne strøm. |
DoubleStream mapToDouble(ToDoubleFunction mapper) | Det returnerer en DoubleStream bestående af resultaterne af at anvende den givne funktion på elementerne i denne strøm. |
IntStream mapToInt(ToIntFunction mapper) | Det returnerer en IntStream, der består af resultaterne af at anvende den givne funktion på elementerne i denne strøm. | LongStream mapToLong(ToLongFunction mapper) | Det returnerer en LongStream, der består af resultaterne af at anvende den givne funktion på elementerne i denne strøm. |
Valgfri max (Komparator komparator) | Det returnerer det maksimale element i denne stream i henhold til den medfølgende komparator. Dette er et særligt tilfælde af en reduktion. |
Valgfri min (Komparator komparator) | Den returnerer minimumselementet af denne strøm i henhold til den medfølgende komparator. Dette er et særligt tilfælde af en reduktion. |
boolesk noneMatch(prædikatprædikat) | Det returnerer elementer af denne strøm, der matcher det angivne prædikat. Hvis strømmen er tom, returneres sand, og prædikatet evalueres ikke. |
@SafeVarargs statisk strøm af (T... værdier) | Det returnerer en sekventielt ordnet strøm, hvis elementer er de angivne værdier. |
statisk strøm af (T t) | Det returnerer en sekventiel Stream, der indeholder et enkelt element. |
Stream kig (forbrugerhandling) | Den returnerer en strøm, der består af elementerne i denne strøm, og udfører desuden den angivne handling på hvert element, efterhånden som elementer forbruges fra den resulterende strøm. |
Valgfri reduktion (BinaryOperator akkumulator) | Den udfører en reduktion på elementerne i denne strøm ved hjælp af en associativ akkumuleringsfunktion og returnerer en valgfri, der beskriver den reducerede værdi, hvis nogen. |
T reducere (T-identitet, BinaryOperator-akkumulator) | Den udfører en reduktion på elementerne i denne strøm ved at bruge den angivne identitetsværdi og en associativ akkumuleringsfunktion og returnerer den reducerede værdi. |
U reducere (U-identitet, BiFunction-akkumulator, BinaryOperator-kombiner) | Den udfører en reduktion på elementerne i denne strøm ved at bruge den medfølgende identitet, akkumulering og kombinationsfunktioner. |
Stream spring (lang n) | Den returnerer en strøm bestående af de resterende elementer i denne strøm efter at have kasseret de første n elementer af strømmen. Hvis denne strøm indeholder færre end n elementer, vil en tom strøm blive returneret. |
Stream sorteret() | Det returnerer en strøm, der består af elementerne i denne strøm, sorteret efter naturlig rækkefølge. Hvis elementerne i denne strøm ikke er sammenlignelige, kan en java.lang.ClassCastException blive kastet, når terminaloperationen udføres. |
Stream sorteret (Komparator komparator) | Den returnerer en strøm, der består af elementerne i denne strøm, sorteret efter den medfølgende komparator. |
Objekt[] tilArray() | Det returnerer et array, der indeholder elementerne i denne strøm. |
A[] toArray(IntFunction generator) | Den returnerer et array, der indeholder elementerne i denne strøm, ved at bruge den medfølgende generatorfunktion til at allokere det returnerede array, såvel som eventuelle yderligere arrays, der måtte være nødvendige for en partitioneret udførelse eller til at ændre størrelse. |
Java Eksempel: Filtrering af samling uden brug af Stream
I det følgende eksempel filtrerer vi data uden at bruge stream. Denne tilgang er vi brugt før stream-pakken blev frigivet.
forskel på tiger og løve
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 af samling ved hjælp af Stream
Her filtrerer vi data ved at bruge stream. Du kan se, at koden er optimeret og vedligeholdt. Stream giver hurtig udfø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); } }
Produktion:
[90000.0]
Java Stream Iterating Eksempel
Du kan bruge stream til at gentage et vilkårligt antal gange. Stream giver foruddefinerede metoder til at håndtere den logik, du implementerer. I det følgende eksempel itererer, filtrerer vi og passerede en grænse for at rette gentagelsen.
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); } }
Produktion:
5 10 15 20 25
Java Stream Eksempel: Filtrering og iteration af samling
I det følgende eksempel bruger vi filter() metoden. Her kan du se koden er optimeret og meget 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)); } }
Produktion:
Dell Laptop
Java Stream Eksempel: reduce() Metode i samling
Denne metode tager en sekvens af inputelementer og kombinerer dem til et enkelt resuméresultat ved gentagen operation. For eksempel at finde summen af tal eller akkumulere elementer i en liste.
I det følgende eksempel bruger vi metoden reduce(), som bruges til at summere alle produktpriserne.
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); } }
Produktion:
201000.0 201000.0
Java Stream Eksempel: Sum ved at bruge Collectors Methods
Vi kan også bruge samlere til at beregne summen af numeriske værdier. I det følgende eksempel bruger vi Collectors-klassen og dens specificerede metoder til at beregne summen af alle produktpriserne.
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); } }
Produktion:
201000.0
Java Stream Eksempel: Find maks. og min. produktpris
Følgende eksempel finder min. og maks. produktpris ved at bruge stream. Det giver en praktisk måde at finde værdier på uden at bruge tvingende tilgang.
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); } }
Produktion:
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 giver dig mulighed for at samle dit resultat i forskellige former. Du kan få dit resultat som sæt, liste eller kort og kan udføre manipulation på elementerne.
Java Stream Eksempel: Konverter liste til sæt
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); } }
Produktion:
[25000.0, 28000.0]
Java Stream Eksempel: Konverter liste til kort
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); } }
Produktion:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
Metodereference 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); } }
Produktion:
[90000.0]
30000)>30000){>