Java poskytuje nový dodatečný balíček v Javě 8 s názvem java.util.stream. Tento balíček se skládá z tříd, rozhraní a výčtu, které umožňují operace s prvky ve funkčním stylu. Stream můžete použít importem balíčku java.util.stream.
Stream poskytuje následující funkce:
- Stream neukládá prvky. Jednoduše přenáší prvky ze zdroje, jako je datová struktura, pole nebo I/O kanál, prostřednictvím potrubí výpočetních operací.
- Stream je svou povahou funkční. Operace prováděné na streamu nemění jeho zdroj. Například filtrování toku získaného z kolekce vytvoří nový tok bez filtrovaných prvků namísto odstranění prvků ze zdrojové kolekce.
- Stream je líný a vyhodnocuje kód pouze v případě potřeby.
- Prvky toku jsou během života toku navštěvovány pouze jednou. Stejně jako iterátor musí být vygenerován nový proud, aby bylo možné znovu navštívit stejné prvky zdroje.
Pomocí streamu můžete filtrovat, shromažďovat, tisknout a převádět z jedné datové struktury do jiné atd. V následujících příkladech jsme použili různé operace pomocí proudu.
Metody rozhraní Java Stream
Metody | Popis |
---|---|
boolean allMatch (predikátový predikát) | Vrátí všechny prvky tohoto proudu, které odpovídají zadanému predikátu. Pokud je proud prázdný, vrátí se true a predikát se nevyhodnotí. |
boolean anyMatch (predikátový predikát) | Vrátí jakýkoli prvek tohoto proudu, který odpovídá zadanému predikátu. Pokud je proud prázdný, vrátí se false a predikát se nevyhodnotí. |
statický Stream.Builder builder() | Vrátí tvůrce pro proud. |
R collect (sběratel sběratelů) | Provádí operaci proměnlivé redukce na prvcích tohoto proudu pomocí kolektoru. Kolektor zapouzdřuje funkce používané jako argumenty pro shromažďování (Dodavatel, BiConsumer, BiConsumer), což umožňuje opětovné použití strategií shromažďování a složení operací shromažďování, jako je víceúrovňové seskupování nebo dělení. |
R collect (dodavatel, akumulátor BiConsumer, slučovač BiConsumer) | Provádí operaci proměnlivé redukce na prvcích tohoto proudu. Proměnlivé snížení je takové, ve kterém je snížená hodnota proměnlivým kontejnerem výsledků, jako je ArrayList, a prvky jsou začleněny aktualizací stavu výsledku spíše než nahrazením výsledku. |
statický proud spojit (proud a, proud b) | Vytváří líně zřetězený proud, jehož prvky jsou všechny prvky prvního proudu následované všemi prvky druhého proudu. Výsledný tok je uspořádán, pokud jsou oba vstupní toky uspořádány, a paralelně, pokud je jeden ze vstupních toků paralelní. Když je výsledný proud uzavřen, jsou vyvolány obslužné rutiny pro oba vstupní proudy. |
dlouhý počet () | Vrací počet prvků v tomto proudu. Jedná se o speciální případ redukce. |
Odlišný proud () | Vrací proud skládající se z odlišných prvků (podle Object.equals(Object)) tohoto proudu. |
statický stream prázdný() | Vrací prázdný sekvenční Stream. |
Filtr toku (predikátový predikát) | Vrací proud skládající se z prvků tohoto proudu, které odpovídají danému predikátu. |
Volitelné findAny() | Vrací Volitelné popisující nějaký prvek proudu nebo prázdné Volitelné, pokud je proud prázdný. |
Volitelné findFirst() | Vrátí nepovinné popisující první prvek tohoto proudu nebo prázdné nepovinné, pokud je proud prázdný. Pokud stream nemá pořadí setkání, může být vrácen jakýkoli prvek. |
Streamovat plochou mapu (funkce super T,? extends Stream>mapovač) | Vrací tok sestávající z výsledků nahrazení každého prvku tohoto toku obsahem mapovaného toku vytvořeného aplikací poskytnuté mapovací funkce na každý prvek. Každý mapovaný stream je uzavřen poté, co byl jeho obsah umístěn do tohoto streamu. (Pokud je namapovaný stream null, použije se místo něj prázdný stream.) |
DoubleStream flatMapToDouble (mapovač funkcí) | Vrací DoubleStream sestávající z výsledků nahrazení každého prvku tohoto proudu obsahem mapovaného proudu vytvořeného aplikací poskytnuté mapovací funkce na každý prvek. Každý mapovaný stream je uzavřen poté, co byl jeho obsah umístěn do tohoto proudu. (Pokud je namapovaný stream null, použije se místo něj prázdný stream.) |
IntStream flatMapToInt (mapovač funkcí) | Vrací IntStream sestávající z výsledků nahrazení každého prvku tohoto toku obsahem mapovaného toku vytvořeného aplikací poskytnuté mapovací funkce na každý prvek. Každý mapovaný stream je uzavřen poté, co byl jeho obsah umístěn do tohoto streamu. (Pokud je namapovaný stream null, použije se místo něj prázdný stream.) |
LongStream flatMapToLong (mapovač funkcí) | Vrací LongStream sestávající z výsledků nahrazení každého prvku tohoto toku obsahem mapovaného toku vytvořeného aplikací poskytnuté mapovací funkce na každý prvek. Každý mapovaný stream je uzavřen poté, co byl jeho obsah umístěn do tohoto streamu. (Pokud je namapovaný stream null, použije se místo něj prázdný stream.) |
void forEach (akce spotřebitele) | Provádí akci pro každý prvek tohoto proudu. |
void forEachOrdered (akce spotřebitele) | Provádí akci pro každý prvek tohoto proudu v pořadí setkání proudu, pokud má proud definované pořadí setkání. |
generování statického streamu (dodavatelé) | Vrací nekonečný sekvenční neuspořádaný tok, kde každý prvek generuje poskytnutý dodavatel. To je vhodné pro generování konstantních proudů, proudů náhodných prvků atd. |
iterace statického streamu (T seed, UnaryOperator f) | Vrací nekonečný sekvenční uspořádaný tok vytvořený iterativní aplikací funkce f na počáteční semeno prvku, čímž se vytvoří tok sestávající z semene, f(semen), f(f(seed)) atd. |
Limit streamu (dlouhá maxSize) | Vrací proud sestávající z prvků tohoto proudu, zkrácený tak, aby nebyl delší než maxSize. |
Mapa streamu (mapovač funkcí) | Vrací proud sestávající z výsledků aplikace dané funkce na prvky tohoto proudu. |
DoubleStream mapToDouble (mapovač ToDoubleFunction) | Vrací DoubleStream sestávající z výsledků aplikace dané funkce na prvky tohoto streamu. |
IntStream mapToInt (mapovač ToIntFunction) | Vrací IntStream sestávající z výsledků aplikace dané funkce na prvky tohoto streamu. | LongStream mapToLong (mapovač ToLongFunction) | Vrací LongStream skládající se z výsledků aplikace dané funkce na prvky tohoto streamu. |
Volitelný max (komparátor komparátor) | Vrátí maximální prvek tohoto proudu podle poskytnutého komparátoru. Jedná se o speciální případ redukce. |
Volitelné min (komparátor komparátor) | Vrací minimální prvek tohoto proudu podle poskytnutého komparátoru. Jedná se o speciální případ redukce. |
boolean noneMatch (predikátový predikát) | Vrací prvky tohoto proudu, které odpovídají poskytnutému predikátu. Pokud je proud prázdný, vrátí se true a predikát se nevyhodnotí. |
@SafeVarargs statický proud (hodnoty T...) | Vrací sekvenční uspořádaný proud, jehož prvky jsou zadané hodnoty. |
statický tok (T t) | Vrací sekvenční Stream obsahující jeden prvek. |
Náhled streamu (spotřebitelská akce) | Vrací tok sestávající z prvků tohoto toku a navíc provádí poskytnutou akci na každém prvku, když jsou prvky spotřebovány z výsledného toku. |
Volitelné snížení (akumulátor BinaryOperator) | Provede redukci na prvcích tohoto proudu pomocí asociativní akumulační funkce a vrátí Volitelné popisující sníženou hodnotu, pokud existuje. |
T redukovat (T identita, BinaryOperator akumulátor) | Provede redukci prvků tohoto toku pomocí poskytnuté hodnoty identity a asociativní akumulační funkce a vrátí sníženou hodnotu. |
U redukovat (identita U, akumulátor BiFunction, slučovač BinaryOperator) | Provádí redukci prvků tohoto proudu pomocí poskytovaných funkcí identity, akumulace a kombinování. |
Přeskočit stream (dlouhé n) | Vrací proud sestávající ze zbývajících prvků tohoto proudu po vyřazení prvních n prvků proudu. Pokud tento proud obsahuje méně než n prvků, bude vrácen prázdný proud. |
Stream seřazeno() | Vrací proud sestávající z prvků tohoto proudu, seřazený podle přirozeného řádu. Pokud prvky tohoto proudu nejsou Porovnatelné, může být při provádění operace terminálu vyvolána výjimka java.lang.ClassCastException. |
Stream seřazený (srovnávací komparátor) | Vrací proud sestávající z prvků tohoto proudu seřazený podle poskytnutého komparátoru. |
Object[] toArray() | Vrací pole obsahující prvky tohoto proudu. |
A[] toArray (generátor IntFunction) | Vrátí pole obsahující prvky tohoto proudu pomocí poskytnuté funkce generátoru k alokaci vráceného pole a také všechna další pole, která mohou být vyžadována pro provádění rozdělených částí nebo pro změnu velikosti. |
Příklad Java: Filtrování kolekce bez použití Stream
V následujícím příkladu filtrujeme data bez použití streamu. Tento přístup používáme před vydáním streamového balíčku.
rdbms
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){>
Příklad Java Stream: Filtrování kolekce pomocí Stream
Zde filtrujeme data pomocí streamu. Můžete vidět, že kód je optimalizován a udržován. Stream poskytuje rychlé provedení.
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); } }
Výstup:
[90000.0]
Příklad opakování streamu Java
Stream můžete použít k libovolnému počtu opakování. Stream poskytuje předdefinované metody pro práci s logikou, kterou implementujete. V následujícím příkladu iterujeme, filtrujeme a předáváme limit pro opravu iterace.
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); } }
Výstup:
5 10 15 20 25
Příklad Java Stream: Filtrování a iterace kolekce
V následujícím příkladu používáme metodu filter(). Zde můžete vidět, že kód je optimalizovaný a velmi stručný.
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)); } }
Výstup:
Dell Laptop
Příklad Java Stream: metoda reduction() v kolekci
Tato metoda bere posloupnost vstupních prvků a opakovanou operací je kombinuje do jediného souhrnného výsledku. Například hledání součtu čísel nebo sčítání prvků do seznamu.
V následujícím příkladu používáme metodu reduction(), která se používá k součtu všech cen produktů.
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); } }
Výstup:
201000.0 201000.0
Příklad Java Stream: Součet pomocí metod kolektorů
Můžeme také použít kolektory k výpočtu součtu číselných hodnot. V následujícím příkladu používáme třídu Collectors a její specifikované metody pro výpočet součtu všech cen produktů.
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); } }
Výstup:
201000.0
Příklad Java Stream: Najděte maximální a minimální cenu produktu
Následující příklad vyhledá minimální a maximální cenu produktu pomocí streamu. Poskytuje pohodlný způsob, jak najít hodnoty bez použití imperativního přístupu.
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); } }
Výstup:
90000.0 25000.0
Příklad Java Stream: metoda count() v kolekci
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 vám umožňuje shromažďovat výsledky v různých formách. Můžete získat výsledek jako sadu, seznam nebo mapu a můžete provádět manipulaci s prvky.
Příklad Java Stream : Převeďte seznam na sadu
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); } }
Výstup:
[25000.0, 28000.0]
Příklad Java Stream : Převeďte seznam na mapu
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); } }
Výstup:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
Reference metody v proudu
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); } }
Výstup:
[90000.0]
30000)>30000){>