Java tillhandahåller ett nytt ytterligare paket i Java 8 som heter java.util.stream. Det här paketet består av klasser, gränssnitt och enum för att tillåta funktionella operationer på elementen. Du kan använda stream genom att importera java.util.stream-paketet.
Stream tillhandahåller följande funktioner:
- Stream lagrar inte element. Den förmedlar helt enkelt element från en källa som en datastruktur, en array eller en I/O-kanal, genom en pipeline av beräkningsoperationer.
- Stream är funktionell till sin natur. Åtgärder som utförs på en stream ändrar inte dess källa. Till exempel, filtrering av en ström erhållen från en samling producerar en ny ström utan de filtrerade elementen, snarare än att ta bort element från källsamlingen.
- Stream är lat och utvärderar kod endast när det behövs.
- Elementen i en bäck besöks bara en gång under en bäcks liv. Precis som en Iterator måste en ny ström genereras för att återbesöka samma element i källan.
Du kan använda stream för att filtrera, samla in, skriva ut och konvertera från en datastruktur till en annan etc. I följande exempel har vi tillämpat olika operationer med hjälp av stream.
Java Stream-gränssnittsmetoder
Metoder | Beskrivning |
---|---|
boolean allMatch(predikatpredikat) | Den returnerar alla element i denna ström som matchar det angivna predikatet. Om strömmen är tom returneras true och predikatet utvärderas inte. |
boolean anyMatch(predikatpredikat) | Den returnerar alla element i denna ström som matchar det angivna predikatet. Om strömmen är tom returneras false och predikatet utvärderas inte. |
statisk Stream.Builder builder() | Det returnerar en byggare för en Stream. |
R collect(Collector collector) | Den utför en föränderlig reduktionsoperation på elementen i denna ström med hjälp av en Collector. En Collector kapslar in funktionerna som används som argument för att samla in (Leverantör, BiConsumer, BiConsumer), vilket möjliggör återanvändning av insamlingsstrategier och sammansättning av insamlingsoperationer såsom gruppering på flera nivåer eller partitionering. |
R collect (Leverantörsleverantör, BiConsumer ackumulator, BiConsumer combiner) | Den utför en föränderlig reduktionsoperation på elementen i denna ström. En föränderlig reduktion är en där det reducerade värdet är en föränderlig resultatbehållare, till exempel en ArrayList, och element inkorporeras genom att uppdatera tillståndet för resultatet snarare än genom att ersätta resultatet. |
statisk strömkonkat(ström a, ström b) | Det skapar en lätt sammanfogad ström vars element är alla element i den första strömmen följt av alla element i den andra strömmen. Den resulterande strömmen ordnas om båda ingångsströmmarna är ordnade, och parallell om någon av ingångsströmmarna är parallella. När den resulterande strömmen stängs, anropas stängningshanterarna för båda ingångsströmmarna. |
lång räkning () | Det returnerar antalet element i denna ström. Detta är ett specialfall av en minskning. |
Stream distinct() | Den returnerar en ström som består av de distinkta elementen (enligt Object.equals(Object)) i denna ström. |
statisk ström tom() | Den returnerar en tom sekventiell ström. |
Strömfilter (predikatpredikat) | Den returnerar en ström som består av elementen i denna ström som matchar det givna predikatet. |
Valfri findAny() | Den returnerar en Optional som beskriver något element i strömmen, eller en tom Optional om strömmen är tom. |
Valfri findFirst() | Den returnerar en Optional som beskriver det första elementet i denna ström, eller en tom Optional om strömmen är tom. Om strömmen inte har någon mötesordning kan alla element returneras. |
Streama flatMap(Funktion super T,? extends Stream>kartläggare) | Den returnerar en ström som består av resultaten av att ersätta varje element i denna ström med innehållet i en mappad ström som produceras genom att tillämpa den tillhandahållna mappningsfunktionen på varje element. Varje mappad ström stängs efter att dess innehåll har placerats i denna ström. (Om en mappad ström är null används en tom ström istället.) |
DoubleStream flatMapToDouble(Funktionsmappare) | Den returnerar en DoubleStream som består av resultaten av att ersätta varje element i denna ström med innehållet i en mappad ström som produceras genom att tillämpa den tillhandahållna mappningsfunktionen på varje element. Varje mappad ström stängs efter att dess innehåll har placerats i denna ström. (Om en mappad ström är null används en tom ström istället.) |
IntStream flatMapToInt(Funktionsmappare) | Den returnerar en IntStream som består av resultaten av att ersätta varje element i denna ström med innehållet i en mappad ström som produceras genom att tillämpa den tillhandahållna mappningsfunktionen på varje element. Varje mappad ström stängs efter att dess innehåll har placerats i denna ström. (Om en mappad ström är null används en tom ström istället.) |
LongStream flatMapToLong(Funktionsmappare) | Den returnerar en LongStream som består av resultaten av att ersätta varje element i denna ström med innehållet i en mappad ström som produceras genom att tillämpa den tillhandahållna mappningsfunktionen på varje element. Varje mappad ström stängs efter att dess innehåll har placerats i denna ström. (Om en mappad ström är null används en tom ström istället.) |
void forEach (Konsumentåtgärd) | Den utför en åtgärd för varje element i denna ström. |
void forEachOrdered(Konsumentåtgärd) | Den utför en åtgärd för varje element i denna ström, i strömmens mötesordning om strömmen har en definierad mötesordning. |
generera statisk ström (leverantörer) | Den returnerar en oändlig sekventiell oordnad ström där varje element genereras av den tillhandahållna leverantören. Detta är lämpligt för att generera konstanta strömmar, strömmar av slumpmässiga element, etc. |
statisk ström iteration (T-frö, UnaryOperator f) | Den returnerar en oändligt sekventiellt ordnad ström producerad genom iterativ tillämpning av en funktion f till ett initialt elementfrö, vilket producerar en ström bestående av frö, f(frö), f(f(frö)), etc. |
Strömgräns (lång maxstorlek) | Den returnerar en ström som består av elementen i denna ström, trunkerad så att den inte är längre än maxSize i längd. |
Strömkarta (Funktionsmappare) | Den returnerar en ström som består av resultaten av att tillämpa den givna funktionen på elementen i denna ström. |
DoubleStream mapToDouble(ToDoubleFunction mapper) | Den returnerar en DoubleStream som består av resultaten av att tillämpa den givna funktionen på elementen i denna ström. |
IntStream mapToInt(ToIntFunction mapper) | Den returnerar en IntStream som består av resultaten av att tillämpa den givna funktionen på elementen i denna ström. | LongStream mapToLong(ToLongFunction mapper) | Den returnerar en LongStream som består av resultaten av att tillämpa den givna funktionen på elementen i denna ström. |
Valfri max (jämförare komparator) | Den returnerar det maximala elementet i denna ström enligt den medföljande komparatorn. Detta är ett specialfall av en minskning. |
Valfri min (jämförare komparator) | Den returnerar minimielementet för denna ström enligt den medföljande komparatorn. Detta är ett specialfall av en minskning. |
boolean noneMatch(predikatpredikat) | Den returnerar element i denna ström som matchar det angivna predikatet. Om strömmen är tom returneras true och predikatet utvärderas inte. |
@SafeVarargs statisk ström av (T... värden) | Den returnerar en sekventiellt ordnad ström vars element är de angivna värdena. |
statisk ström av (T t) | Den returnerar en sekventiell ström som innehåller ett enda element. |
Strömtitt (Konsumentåtgärd) | Den returnerar en ström som består av elementen i denna ström, och utför dessutom den angivna åtgärden på varje element när elementen konsumeras från den resulterande strömmen. |
Valfri reducering (BinaryOperator ackumulator) | Den utför en reduktion på elementen i denna ström, med hjälp av en associativ ackumuleringsfunktion, och returnerar en Optional som beskriver det reducerade värdet, om något. |
T reducera (T-identitet, BinaryOperator-ackumulator) | Den utför en reduktion på elementen i denna ström, med hjälp av det angivna identitetsvärdet och en associativ ackumuleringsfunktion, och returnerar det reducerade värdet. |
U reducera (U-identitet, BiFunction-ackumulator, BinaryOperator-kombinerare) | Den utför en minskning av elementen i denna ström, med hjälp av den tillhandahållna identiteten, ackumulerings- och kombinationsfunktionerna. |
Strömhoppa (lång n) | Den returnerar en ström som består av de återstående elementen i denna ström efter att ha kastat de första n elementen i strömmen. Om denna ström innehåller färre än n element kommer en tom ström att returneras. |
Ström sorterad() | Den returnerar en ström som består av elementen i denna ström, sorterad enligt naturlig ordning. Om elementen i denna ström inte är jämförbara, kan en java.lang.ClassCastException kastas när terminaloperationen exekveras. |
Strömsorterad (Comparator comparator) | Den returnerar en ström som består av elementen i denna ström, sorterad enligt den medföljande komparatorn. |
Objekt[] tillArray() | Den returnerar en array som innehåller elementen i denna ström. |
A[] toArray(IntFunction generator) | Den returnerar en array som innehåller elementen i denna ström, med hjälp av den tillhandahållna generatorfunktionen för att allokera den returnerade arrayen, såväl som eventuella ytterligare arrayer som kan behövas för en partitionerad exekvering eller för att ändra storlek. |
Java Exempel: Filtrera samling utan att använda Stream
I följande exempel filtrerar vi data utan att använda stream. Det här tillvägagångssättet användes innan streampaketet släpptes.
cpp är lika med
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 Exempel: Filtrera samling med hjälp av Stream
Här filtrerar vi data genom att använda ström. Du kan se att koden är optimerad och underhållen. Stream ger snabb exekvering.
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 Exempel
Du kan använda stream för att iterera hur många gånger som helst. Stream tillhandahåller fördefinierade metoder för att hantera logiken du implementerar. I följande exempel itererar, filtrerar vi och passerade en gräns för att fixa iterationen.
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 Exempel: Filtrering och itererande samling
I följande exempel använder vi metoden filter(). Här kan du se koden är optimerad och mycket koncis.
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 Exempel: reduce() Metod i samling
Denna metod tar en sekvens av inmatningselement och kombinerar dem till ett enda sammanfattningsresultat genom upprepad operation. Till exempel att hitta summan av siffror eller ackumulera element i en lista.
I följande exempel använder vi metoden reduce() som används för att summera alla produktpriser.
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 Exempel: Summa med hjälp av Collectors Methods
Vi kan också använda samlare för att beräkna summan av numeriska värden. I följande exempel använder vi Collectors class och dess specificerade metoder för att beräkna summan av alla produktpriser.
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 Exempel: Hitta Max och Min produktpris
Följande exempel hittar lägsta och högsta produktpris genom att använda stream. Det ger ett bekvämt sätt att hitta värderingar utan att använda imperativt tillvägagångssätt.
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 Exempel: count() Metod 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 låter dig samla ditt resultat i alla olika former. Du kan få ditt resultat som set, lista eller karta och kan utföra manipulation på elementen.
Java Stream Exempel: Konvertera lista till Set
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'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 Exempel: Konvertera lista till karta
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}
Metodreferens 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){>