Stream blev introduceret i Java 8 Stream API'en bruges til at behandle samlinger af objekter. En strøm i Java er en sekvens af objekter, der understøtter forskellige metoder, der kan pipelineres for at producere det ønskede resultat.
Brug af Stream i Java
Brugen af Stream i Java er nævnt nedenfor:
- Stream API er en måde at udtrykke og behandle samlinger af objekter på.
- Gør det muligt for os at udføre operationer som filtrering af kortlægning, reduktion og sortering.
Sådan opretter du en Java-stream
Java Stream Creation er et af de mest grundlæggende trin, før du overvejer funktionerne i Java Stream. Nedenfor er syntaksen givet for at erklære en Java Stream.
numpy unik
Syntaks
Strøm
strøm;
Her er T enten et klasseobjekt eller datatype afhængigt af erklæringen.
Java Stream-funktioner
Funktionerne i Java-streams er nævnt nedenfor:
- En Stream er ikke en datastruktur; det tager bare input fra Collections Arrays eller I/O-kanaler.
- Strømme ændrer ikke de originale data; de producerer kun resultater ved hjælp af deres metoder.
- Mellemliggende operationer (som filterkort osv.) er dovne og returnerer en anden Stream, så du kan kæde dem sammen.
- En terminaloperation (som collect forEach count) afslutter streamen og giver det endelige resultat.
Forskellige operationer på streams
Der er to typer operationer i streams:
- Mellemliggende operationer
- Terminaldrift
Mellemliggende operationer

Mellemliggende operationer er de typer operationer, hvor flere metoder er kædet i træk.
Karakteristika for mellemliggende operationer
- Metoder er kædet sammen.
- Mellemliggende operationer omdanner en strøm til en anden strøm.
- Det muliggør konceptet med filtrering, hvor en metode filtrerer data og sender dem til en anden metode efter behandling.
Vigtige mellemliggende operationer
Der er et par mellemliggende operationer nævnt nedenfor:
1. kort() : Kortmetoden bruges til at returnere en strøm, der består af resultaterne af at anvende den givne funktion på elementerne i denne strøm.
Syntaks:
Strøm kort (Funktion super T ? extends R>kortlægger)
2. filter() : Filtermetoden bruges til at vælge elementer i henhold til prædikatet, der er sendt som argument.
Syntaks:
Strøm
filter(prædikat super T>prædikat)
3. sorteret() : Den sorterede metode bruges til at sortere strømmen.
Syntaks:
Strøm
sorteret()
Strømsorteret (Komparator super T>komparator)
4. flatMap(): FlatMap-operationen i Java Streams bruges til at flade en strøm af samlinger til en enkelt strøm af elementer.
Syntaks:
Strøm flatMap(Funktion super T ? extends Stream extends R>> kortlægger)
5. distinkt() : Fjerner duplikerede elementer. Det returnerer en strøm bestående af de forskellige elementer (ifølge Object.equals(Object)).
Syntaks:
Strøm
distinkt() streng understreng java
6. kig() : Udfører en handling på hvert element uden at ændre strømmen. Det returnerer en strøm, der består af elementerne i denne strøm, der desuden udfører den angivne handling på hvert element, efterhånden som elementer forbruges fra den resulterende strøm.
Syntaks:
Strøm
kig (Forbruger super T>handling)
Java-program, der demonstrerer brugen af alle de mellemliggende operationer:
Javaimport java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class StreamIntermediateOperationsExample { public static void main(String[] args) { // List of lists of names List<List<String>> listOfLists = Arrays.asList( Arrays.asList('Reflection' 'Collection' 'Stream') Arrays.asList('Structure' 'State' 'Flow') Arrays.asList('Sorting' 'Mapping' 'Reduction' 'Stream') ); // Create a set to hold intermediate results Set<String> intermediateResults = new HashSet<>(); // Stream pipeline demonstrating various intermediate operations List<String> result = listOfLists.stream() .flatMap(List::stream) .filter(s -> s.startsWith('S')) .map(String::toUpperCase) .distinct() .sorted() .peek(s -> intermediateResults.add(s)) .collect(Collectors.toList()); // Print the intermediate results System.out.println('Intermediate Results:'); intermediateResults.forEach(System.out::println); // Print the final result System.out.println('Final Result:'); result.forEach(System.out::println); } }
Produktion
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE
Forklaring:
- ListOfLists oprettes som en liste, der indeholder andre lister med strenge.
- flatMap(Liste::stream): Flader de indlejrede lister sammen til en enkelt strøm af strenge.
- filter(s -> s.startsWith('S')) : Filtrerer strengene til kun at inkludere dem, der starter med 'S'.
- map(String::toUpperCase) : Konverterer hver streng i strømmen til store bogstaver.
- distinkt() : Fjerner alle duplikerede strenge.
- sorteret() : Sorterer de resulterende strenge alfabetisk.
- kig(...): Tilføjer hvert behandlet element til intermediateResults-sættet til mellemliggende inspektion.
- collect(Collectors.toList()): Samler de endeligt behandlede strenge til en liste kaldet resultat.
Programmet udskriver de mellemresultater, der er gemt i sættet mellemresultater. Til sidst udskriver den resultatlisten, som indeholder de fuldt behandlede strenge efter alle stream-operationer.
Terminaldrift
Terminaloperationer er den type operationer, der returnerer resultatet. Disse operationer behandles ikke yderligere, men returnerer en endelig resultatværdi.
Vigtige terminaloperationer
1. indsamle() : Opsamlingsmetoden bruges til at returnere resultatet af de mellemliggende operationer udført på strømmen.
Syntaks:
R indsamler (samler super T A R>samler)
2. forHver() : ForEach-metoden bruges til at iterere gennem hvert element i strømmen.
Syntaks:
ugyldig for Hver (Forbruger super T>handling)
3. reducere(): Reduceringsmetoden bruges til at reducere elementerne i en strøm til en enkelt værdi. Reduceringsmetoden tager en BinaryOperator som parameter.
Syntaks:
T reduce(T identitet BinaryOperator
akkumulator)
Valgfrireducer(BinaryOperator akkumulator)
4. tælle() : Returnerer antallet af elementer i strømmen.
Syntaks:
lang tælling ()
5. findFirst() : Returnerer det første element i strømmen, hvis det er til stede.
Syntaks:
Valgfri
findFirst() js global variabel
6. allMatch() : Kontrollerer, om alle elementer i strømmen matcher et givet prædikat.
Syntaks:
boolesk allMatch(prædikat super T>prædikat)
7. Anymatch () : Kontrollerer, om noget element i strømmen matcher et givet prædikat.
Syntaks:
Boolean Anymatch (prædikat super T>prædikat)
Her tildeles en variabel 0 som startværdi, og i tilføjes til den.
Note: Mellemliggende operationer kører baseret på konceptet Lazy Evaluation, som sikrer, at hver metode returnerer en fast værdi (Terminal operation), før den går videre til den næste metode.
Java-program, der bruger alle terminaloperationer:
Javaimport java.util.*; import java.util.stream.Collectors; public class StreamTerminalOperationsExample { public static void main(String[] args) { // Sample data List<String> names = Arrays.asList( 'Reflection' 'Collection' 'Stream' 'Structure' 'Sorting' 'State' ); // forEach: Print each name System.out.println('forEach:'); names.stream().forEach(System.out::println); // collect: Collect names starting with 'S' into a list List<String> sNames = names.stream() .filter(name -> name.startsWith('S')) .collect(Collectors.toList()); System.out.println('ncollect (names starting with 'S'):'); sNames.forEach(System.out::println); // reduce: Concatenate all names into a single string String concatenatedNames = names.stream().reduce( '' (partialString element) -> partialString + ' ' + element ); System.out.println('nreduce (concatenated names):'); System.out.println(concatenatedNames.trim()); // count: Count the number of names long count = names.stream().count(); System.out.println('ncount:'); System.out.println(count); // findFirst: Find the first name Optional<String> firstName = names.stream().findFirst(); System.out.println('nfindFirst:'); firstName.ifPresent(System.out::println); // allMatch: Check if all names start with 'S' boolean allStartWithS = names.stream().allMatch( name -> name.startsWith('S') ); System.out.println('nallMatch (all start with 'S'):'); System.out.println(allStartWithS); // anyMatch: Check if any name starts with 'S' boolean anyStartWithS = names.stream().anyMatch( name -> name.startsWith('S') ); System.out.println('nanyMatch (any start with 'S'):'); System.out.println(anyStartWithS); } }
Produktion:
ProduktionForklaring:
- Navnelisten oprettes med eksempelstrenge.
- for hver: Udskriver hvert navn på listen.
- samle : Filtrerer navne, der starter med 'S' og samler dem på en ny liste.
- reducere : Sammenkæder alle navne i en enkelt streng.
- tælle : Tæller det samlede antal navne.
- find først : Finder og udskriver fornavnet på listen.
- allMatch : Tjekker om alle navne starter med 'S'.
- uheldig : Kontrollerer, om et navn starter med 'S'.
Programmet udskriver hvert navn navne begyndende med 'S' sammenkædede navne antallet af navne fornavnet, uanset om alle navne starter med 'S' og om et navn starter med 'S'.
Fordelen ved Java Stream
Der er nogle fordele, som vi bruger Stream i Java som nævnt nedenfor:
- Ingen opbevaring
- Pipeline af funktioner
- Dovenskab
- Kan være uendelig
- Kan paralleliseres
- Kan oprettes fra samlingsarrays Filer Linjer Metoder i Stream IntStream osv.
Real-World Use Cases af Java Streams
Streams er meget brugt i moderne Java-applikationer til:
- Databehandling
- Til behandling af JSON/XML-svar
- Til databaseoperationer
- Samtidig behandling