logo

Java 8-stream

Java biedt een nieuw aanvullend pakket in Java 8 genaamd java.util.stream. Dit pakket bestaat uit klassen, interfaces en enum om functionele bewerkingen op de elementen mogelijk te maken. U kunt stream gebruiken door het pakket java.util.stream te importeren.


Stream biedt de volgende functies:

  • Stream slaat geen elementen op. Het transporteert eenvoudigweg elementen uit een bron, zoals een datastructuur, een array of een I/O-kanaal, via een pijplijn van computerbewerkingen.
  • Stream is functioneel van aard. Bewerkingen die op een stream worden uitgevoerd, wijzigen de bron ervan niet. Als u bijvoorbeeld een stroom filtert die is verkregen uit een verzameling, wordt er een nieuwe stroom geproduceerd zonder de gefilterde elementen, in plaats van dat elementen uit de bronverzameling worden verwijderd.
  • Stream is lui en evalueert code alleen wanneer dat nodig is.
  • De elementen van een beek worden tijdens de levensduur van een beek slechts één keer bezocht. Net als bij een Iterator moet er een nieuwe stream worden gegenereerd om dezelfde elementen van de bron opnieuw te bekijken.

U kunt stream gebruiken om te filteren, verzamelen, afdrukken en converteren van de ene datastructuur naar de andere, enz. In de volgende voorbeelden hebben we verschillende bewerkingen toegepast met behulp van stream.

Java Stream Interface-methoden

Methoden Beschrijving
boolean allMatch(predikaatpredikaat) Het retourneert alle elementen van deze stroom die overeenkomen met het opgegeven predikaat. Als de stream leeg is, wordt true geretourneerd en wordt het predikaat niet geëvalueerd.
boolean anyMatch(predikaatpredikaat) Het retourneert elk element van deze stroom dat overeenkomt met het opgegeven predikaat. Als de stream leeg is, wordt false geretourneerd en wordt het predikaat niet geëvalueerd.
statische Stream.Builder-builder() Het retourneert een bouwer voor een stroom.
R collect(Verzamelaarverzamelaar) Het voert een veranderlijke reductiebewerking uit op de elementen van deze stroom met behulp van een Collector. Een Collector omvat de functies die worden gebruikt als argumenten voor het verzamelen (Leverancier, BiConsumer, BiConsumer), waardoor hergebruik van verzamelstrategieën en samenstelling van verzamelbewerkingen, zoals groepering of partitie op meerdere niveaus, mogelijk wordt gemaakt.
R collect (leverancier, BiConsumer-accumulator, BiConsumer-combinator) Het voert een veranderlijke reductiebewerking uit op de elementen van deze stroom. Een veranderlijke reductie is een reductie waarbij de gereduceerde waarde een veranderbare resultaatcontainer is, zoals een ArrayList, en elementen worden opgenomen door de status van het resultaat bij te werken in plaats van door het resultaat te vervangen.
statische Stream concat(Stream a, Stream b) Het creëert een lui aaneengeschakelde stroom waarvan de elementen alle elementen van de eerste stroom zijn, gevolgd door alle elementen van de tweede stroom. De resulterende stroom wordt geordend als beide invoerstromen zijn geordend, en parallel als een van de invoerstromen parallel is. Wanneer de resulterende stroom wordt gesloten, worden de close handlers voor beide invoerstromen aangeroepen.
lange telling() Het retourneert het aantal elementen in deze stream. Dit is een speciaal geval van reductie.
Stream onderscheidend() Het retourneert een stroom die bestaat uit de afzonderlijke elementen (volgens Object.equals(Object)) van deze stroom.
statische stroom leeg() Het retourneert een lege sequentiële stroom.
Streamfilter (predikaatpredikaat) Het retourneert een stroom die bestaat uit de elementen van deze stroom die overeenkomen met het gegeven predikaat.
Optioneel findAny() Het retourneert een Optioneel dat een element van de stream beschrijft, of een lege Optioneel als de stream leeg is.
Optioneel findFirst() Het retourneert een Optioneel die het eerste element van deze stream beschrijft, of een lege Optioneel als de stream leeg is. Als de stream geen ontmoetingsvolgorde heeft, kan elk element worden geretourneerd.
Stream flatMap (Functiekaartmaker) Het retourneert een stroom die bestaat uit de resultaten van het vervangen van elk element van deze stroom door de inhoud van een in kaart gebrachte stroom die is geproduceerd door de meegeleverde mappingfunctie op elk element toe te passen. Elke in kaart gebrachte stream wordt gesloten nadat de inhoud ervan in deze stream is geplaatst. (Als een toegewezen stream nul is, wordt in plaats daarvan een lege stream gebruikt.)
DoubleStream flatMapToDouble (Functietoewijzer) Het retourneert een DoubleStream die bestaat uit de resultaten van het vervangen van elk element van deze stream door de inhoud van een toegewezen stream die is geproduceerd door de meegeleverde toewijzingsfunctie op elk element toe te passen. Elke in kaart gebrachte stream wordt gesloten nadat de inhoud ervan in deze stream is geplaatst. (Als een toegewezen stream nul is, wordt in plaats daarvan een lege stream gebruikt.)
IntStream flatMapToInt (Functietoewijzer) Het retourneert een IntStream die bestaat uit de resultaten van het vervangen van elk element van deze stream door de inhoud van een toegewezen stream die is geproduceerd door de meegeleverde mappingfunctie op elk element toe te passen. Elke in kaart gebrachte stream wordt gesloten nadat de inhoud ervan in deze stream is geplaatst. (Als een toegewezen stream nul is, wordt in plaats daarvan een lege stream gebruikt.)
LongStream flatMapToLong (Functietoewijzer) Het retourneert een LongStream die bestaat uit de resultaten van het vervangen van elk element van deze stream door de inhoud van een toegewezen stream die is geproduceerd door de meegeleverde toewijzingsfunctie op elk element toe te passen. Elke in kaart gebrachte stream wordt gesloten nadat de inhoud ervan in deze stream is geplaatst. (Als een toegewezen stream nul is, wordt in plaats daarvan een lege stream gebruikt.)
void forEach (consumentenactie) Het voert een actie uit voor elk element van deze stroom.
void forEachOrdered(Consumentenactie) Het voert een actie uit voor elk element van deze stroom, in de ontmoetingsvolgorde van de stroom als de stroom een ​​gedefinieerde ontmoetingsvolgorde heeft.
statische stroom genereren (leveranciers) Het retourneert een oneindige opeenvolgende ongeordende stroom waarbij elk element wordt gegenereerd door de opgegeven leverancier. Dit is geschikt voor het genereren van constante stromen, stromen van willekeurige elementen, enz.
statische stroom iteratie (T-zaad, UnaryOperator f) Het retourneert een oneindige sequentieel geordende stroom die wordt geproduceerd door iteratieve toepassing van een functie f op een initieel element zaad, waardoor een stroom wordt geproduceerd die bestaat uit zaad, f(seed), f(f(seed)), enz.
Streamlimiet (lange maximale grootte) Het retourneert een stream die bestaat uit de elementen van deze stream, afgekapt zodat deze niet langer is dan maxSize.
Streamkaart (Functietoewijzer) Het retourneert een stroom die bestaat uit de resultaten van het toepassen van de gegeven functie op de elementen van deze stroom.
DoubleStream mapToDouble(ToDoubleFunction mapper) Het retourneert een DoubleStream die bestaat uit de resultaten van het toepassen van de gegeven functie op de elementen van deze stream.
IntStream mapToInt(ToIntFunctietoewijzer) Het retourneert een IntStream die bestaat uit de resultaten van het toepassen van de gegeven functie op de elementen van deze stream.
LongStream mapToLong(ToLongFunction mapper) Het retourneert een LongStream die bestaat uit de resultaten van het toepassen van de gegeven functie op de elementen van deze stream.
Optioneel max (vergelijkervergelijker) Het retourneert het maximale element van deze stream volgens de meegeleverde Comparator. Dit is een speciaal geval van reductie.
Optioneel min (vergelijkervergelijker) Het retourneert het minimale element van deze stream volgens de meegeleverde Comparator. Dit is een speciaal geval van reductie.
boolean noneMatch(predikaatpredikaat) Het retourneert elementen van deze stroom die overeenkomen met het opgegeven predikaat. Als de stream leeg is, wordt true geretourneerd en wordt het predikaat niet geëvalueerd.
@SafeVarargs statische stroom van(T...-waarden) Het retourneert een sequentieel geordende stroom waarvan de elementen de opgegeven waarden zijn.
statische stroom van (T t) Het retourneert een opeenvolgende stroom die één enkel element bevat.
Stream peek (consumentenactie) Het retourneert een stroom die bestaat uit de elementen van deze stroom, waarbij bovendien de opgegeven actie op elk element wordt uitgevoerd wanneer elementen uit de resulterende stroom worden verbruikt.
Optioneel verkleinen (BinaryOperator-accumulator) Het voert een reductie uit op de elementen van deze stroom, met behulp van een associatieve accumulatiefunctie, en retourneert een Optioneel die de verminderde waarde beschrijft, indien aanwezig.
T reduce(T-identiteit, BinaryOperator-accumulator) Het voert een reductie uit op de elementen van deze stroom, met behulp van de opgegeven identiteitswaarde en een associatieve accumulatiefunctie, en retourneert de gereduceerde waarde.
U reduce (U-identiteit, BiFunction-accumulator, BinaryOperator-combinator) Het voert een reductie uit op de elementen van deze stroom, met behulp van de geboden identiteit, accumulatie en combinatiefuncties.
Stream overslaan (lange n) Het retourneert een stroom die bestaat uit de resterende elementen van deze stroom nadat de eerste n elementen van de stroom zijn weggegooid. Als deze stream minder dan n elementen bevat, wordt een lege stream geretourneerd.
Stream gesorteerd() Het retourneert een stroom die bestaat uit de elementen van deze stroom, gesorteerd op natuurlijke volgorde. Als de elementen van deze stream niet vergelijkbaar zijn, kan er een java.lang.ClassCastException worden gegenereerd wanneer de terminalbewerking wordt uitgevoerd.
Stream gesorteerd (vergelijkervergelijker) Het retourneert een stream die bestaat uit de elementen van deze stream, gesorteerd op basis van de meegeleverde Comparator.
Object[] naarArray() Het retourneert een array met de elementen van deze stroom.
A[] toArray(IntFunction-generator) Het retourneert een array met de elementen van deze stroom, waarbij de meegeleverde generatorfunctie wordt gebruikt om de geretourneerde array toe te wijzen, evenals eventuele extra arrays die nodig kunnen zijn voor een gepartitioneerde uitvoering of voor het wijzigen van de grootte.

Java-voorbeeld: verzameling filteren zonder Stream te gebruiken

In het volgende voorbeeld filteren we gegevens zonder gebruik te maken van stream. Deze aanpak hebben we gebruikt voordat het streampakket werd uitgebracht.

waarom string onveranderlijk in Java
 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;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-&gt;element+1) .filter(element-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 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){>

Voorbeeld van Java Stream: Verzameling filteren met behulp van Stream

Hier filteren we gegevens met behulp van stream. Je kunt zien dat de code is geoptimaliseerd en onderhouden. Stream zorgt voor een snelle uitvoering.

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } 

Uitgang:

 [90000.0] 

Voorbeeld van iteratie van Java Stream

U kunt stream gebruiken om een ​​willekeurig aantal keren te herhalen. Stream biedt vooraf gedefinieerde methoden om om te gaan met de logica die u implementeert. In het volgende voorbeeld zijn we aan het itereren, filteren en hebben we een limiet doorgegeven om de iteratie op te lossen.

 import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } 

Uitgang:

 5 10 15 20 25 

Java Stream-voorbeeld: verzameling filteren en itereren

In het volgende voorbeeld gebruiken we de methode filter(). Hier kunt u zien dat de code geoptimaliseerd en zeer beknopt is.

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } 

Uitgang:

 Dell Laptop 

Java Stream-voorbeeld: reduce()-methode in verzameling

Deze methode neemt een reeks invoerelementen en combineert deze door herhaalde bewerkingen tot één samenvattend resultaat. Bijvoorbeeld het vinden van de som van getallen of het verzamelen van elementen in een lijst.

In het volgende voorbeeld gebruiken we de methode reduce(), die wordt gebruikt om alle productprijzen op te tellen.

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } 

Uitgang:

 201000.0 201000.0 

Java Stream-voorbeeld: som met behulp van Collectors-methoden

We kunnen ook verzamelaars gebruiken om de som van numerieke waarden te berekenen. In het volgende voorbeeld gebruiken we de klasse Collectors en de gespecificeerde methoden om de som van alle productprijzen te berekenen.

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } 

Uitgang:

 201000.0 

Java Stream-voorbeeld: zoek de maximale en minimale productprijs

In het volgende voorbeeld wordt de minimale en maximale productprijs gevonden met behulp van stream. Het biedt een handige manier om waarden te vinden zonder een imperatieve benadering te gebruiken.

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } 

Uitgang:

 90000.0 25000.0 

Java Stream-voorbeeld: count() Methode in verzameling

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 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)>

Met stream kunt u uw resultaat in verschillende vormen verzamelen. U kunt uw resultaat als set, lijst of kaart krijgen en manipulatie op de elementen uitvoeren.


Java Stream-voorbeeld: lijst omzetten in 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } 

Uitgang:

 [25000.0, 28000.0] 

Java Stream-voorbeeld: Lijst omzetten in kaart

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } 

Uitgang:

 {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} 

Methodereferentie in stroom

 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,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } 

Uitgang:

 [90000.0]