Stream API, geïntroduceerd in Java 8, wordt gebruikt om verzamelingen objecten te verwerken. Een stream in Java is een reeks objecten die verschillende methoden ondersteunen die kunnen worden gepijplijnd om het gewenste resultaat te produceren.
Gebruik van Stream in Java
Het gebruik van Stream in Java wordt hieronder vermeld:
- Stream API is een manier om verzamelingen objecten uit te drukken en te verwerken.
- Stel ons in staat om bewerkingen uit te voeren zoals filteren, in kaart brengen, verkleinen en sorteren.
Hoe maak je een Java-stream?
Java Stream Creatie is een van de meest fundamentele stappen voordat u de functionaliteiten van de Java Stream in overweging neemt. Hieronder vindt u de syntaxis voor het declareren van Java Stream.
Syntaxis
Stream stream;>
Hier is T een klasse, object of gegevenstype, afhankelijk van de declaratie.
Java Stream-functies
De kenmerken van de Java-stream worden hieronder vermeld:
- Een stream is geen datastructuur, maar heeft input nodig van de Collections-, Arrays- of I/O-kanalen.
- Streams veranderen de oorspronkelijke datastructuur niet, ze leveren alleen het resultaat volgens de pijplijnmethoden.
- Elke tussenliggende bewerking wordt lui uitgevoerd en retourneert als resultaat een stroom, waardoor verschillende tussenliggende bewerkingen kunnen worden gepijplijnd. Terminalbewerkingen markeren het einde van de stream en retourneren het resultaat.
Verschillende bewerkingen op streams
Er zijn twee soorten bewerkingen in streams:
- Tussenliggende operaties
- Beëindig operaties
Tussenliggende operaties

Tussenliggende bewerkingen zijn het soort bewerkingen waarbij meerdere methoden achter elkaar worden geketend.
Kenmerken van tussentijdse operaties
- Methoden zijn aan elkaar gekoppeld.
- Tussenliggende bewerkingen transformeren een stroom in een andere stroom.
- Het maakt het concept van filteren mogelijk, waarbij de ene methode gegevens filtert en deze na verwerking doorgeeft aan een andere methode.
Voordeel van Java Stream
Er zijn enkele voordelen waardoor we Stream in Java gebruiken, zoals hieronder vermeld:
- Geen opslag
- Pijplijn van functies
- Luiheid
- Kan oneindig zijn
- Kan worden geparallelliseerd
- Kan worden gemaakt op basis van verzamelingen, arrays, bestandsregels, methoden in Stream, IntStream enz.
Belangrijke tussentijdse operaties
Hieronder worden een aantal tussenliggende bewerkingen genoemd:
1. kaart()
De kaartmethode wordt gebruikt om een stroom terug te geven die bestaat uit de resultaten van het toepassen van de gegeven functie op de elementen van deze stroom.
mockito wanneer dan ook
List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());>
2. filter()
De filtermethode wordt gebruikt om elementen te selecteren volgens het predikaat dat als argument is doorgegeven.
List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().filter(s->s.startsWith('S')).collect(Collectors.toList());> 3. gesorteerd()
De gesorteerde methode wordt gebruikt om de stream te sorteren.
List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().sorted().collect(Collectors.toList());> Terminaloperaties
Terminalbewerkingen zijn het type bewerkingen dat het resultaat oplevert. Deze bewerkingen worden niet verder verwerkt en retourneren alleen een uiteindelijke resultaatwaarde.
Belangrijke terminaloperaties
Hieronder worden enkele terminalbewerkingen vermeld:
1. verzamelen()
De collect-methode wordt gebruikt om het resultaat te retourneren van de tussenliggende bewerkingen die op de stream zijn uitgevoerd.
List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());>
2. voorElke()
De forEach-methode wordt gebruikt om elk element van de stream te doorlopen.
List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->Systeem.out.println(y));>
3. verminderen()
De reduce-methode wordt gebruikt om de elementen van een stream tot één enkele waarde te reduceren. De reduce-methode heeft een BinaryOperator als parameter.
List number = Arrays.asList(2,3,4,5); int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);>
Hier wordt aan de ans-variabele de beginwaarde 0 toegewezen en wordt er i aan toegevoegd.
Opmerking: Tussenliggende bewerkingen worden uitgevoerd op basis van het concept van Lazy Evaluation, dat ervoor zorgt dat elke methode een vaste waarde (Terminal-bewerking) retourneert voordat naar de volgende methode wordt overgegaan.
Voorbeeld van Java-stream
Java
// Java program to demonstrate> // the use of stream in java> import> java.util.*;> import> java.util.stream.*;> class> Demo {> >public> static> void> main(String args[])> >{> >// create a list of integers> >List number = Arrays.asList(>2>,>3>,>4>,>5>);> >// demonstration of map method> >List square> >= number.stream()> >.map(x ->x * x)> >.collect(Collectors.toList());> >// create a list of String> >List names = Arrays.asList(> >'Reflection'>,>'Collection'>,>'Stream'>);> >// demonstration of filter method> >List result> >= names.stream()> >.filter(s ->s.startsWith(>'S'>))> >.collect(Collectors.toList());> > >System.out.println(result);> >// demonstration of sorted method> >List show> >= names.stream()> >.sorted()> >.collect(Collectors.toList());> > >System.out.println(show);> >// create a list of integers> >List numbers> >= Arrays.asList(>2>,>3>,>4>,>5>,>2>);> >// collect method returns a set> >Set squareSet> >= numbers.stream()> >.map(x ->x * x)> >.collect(Collectors.toSet());> > >System.out.println(squareSet);> >// demonstration of forEach method> >number.stream()> >.map(x ->x * x)> >.forEach(y ->Systeem.out.println(y));> >// demonstration of reduce method> >int> even> >= number.stream()> >.filter(x ->x %>2> ==>0>)> >.reduce(>0>, (ans, i) ->ans + i);> >System.out.println(even);> >}> }> |
>
>
Uitvoer
[4, 9, 16, 25] [Stream] [Collection, Reflection, Stream] [16, 4, 9, 25] 4 9 16 25 6>
Belangrijke punten/observaties van Java Stream
- Een stroom bestaat uit een bron gevolgd door nul of meer tussenliggende methoden die samen zijn gecombineerd (gepipelined) en een terminalmethode om de objecten te verwerken die zijn verkregen uit de bron volgens de beschreven methoden.
- Stream wordt gebruikt om elementen te berekenen volgens de pijplijnmethoden zonder de oorspronkelijke waarde van het object te wijzigen.