Stream ble introdusert i Java 8 Stream API brukes til å behandle samlinger av objekter. En strøm i Java er en sekvens av objekter som støtter ulike metoder som kan pipelineres for å produsere ønsket resultat.
Bruk av Stream i Java
Bruken av Stream i Java er nevnt nedenfor:
- Stream API er en måte å uttrykke og behandle samlinger av objekter på.
- Gjør oss i stand til å utføre operasjoner som filtrering av kartlegging, reduksjon og sortering.
Hvordan lage en Java Stream
Java Stream Creation er et av de mest grunnleggende trinnene før du vurderer funksjonene til Java Stream. Nedenfor er syntaksen gitt for å deklarere en Java Stream.
numpy unik
Syntaks
Strøm
strøm;
Her er T enten et klasseobjekt eller datatype avhengig av erklæringen.
Java Stream-funksjoner
Funksjonene til Java-strømmer er nevnt nedenfor:
- En strøm er ikke en datastruktur; den tar bare innspill fra Collections Arrays eller I/O-kanaler.
- Strømmer endrer ikke de opprinnelige dataene; de produserer kun resultater ved å bruke metodene deres.
- Mellomliggende operasjoner (som filterkart osv.) er late og returnerer en annen Stream slik at du kan lenke dem sammen.
- En terminaloperasjon (som collect forEach count) avslutter strømmen og gir det endelige resultatet.
Ulike operasjoner på strømmer
Det er to typer operasjoner i strømmer:
- Mellomliggende operasjoner
- Terminaldrift
Mellomliggende operasjoner

Mellomliggende operasjoner er typene operasjoner der flere metoder er lenket etter hverandre.
Kjennetegn på mellomoperasjoner
- Metoder er lenket sammen.
- Mellomoperasjoner forvandler en bekk til en annen strøm.
- Det muliggjør konseptet med filtrering der én metode filtrerer data og sender dem til en annen metode etter behandling.
Viktige mellomoperasjoner
Det er noen få mellomoperasjoner nevnt nedenfor:
1. kart() : Kartmetoden brukes til å returnere en strøm som består av resultatene av å bruke den gitte funksjonen på elementene i denne strømmen.
Syntaks:
Strøm kart(Funksjon super T ? extends R>kartlegger)
2. filter() : Filtermetoden brukes til å velge elementer i henhold til predikatet som ble sendt som argument.
Syntaks:
Strøm
filter(Predikat super T>predikat)
3. sortert() : Den sorterte metoden brukes til å sortere strømmen.
Syntaks:
Strøm
sortert()
Strømsortert(Komparator super T>komparator)
4. flatMap(): FlatMap-operasjonen i Java Streams brukes til å flate ut en strøm av samlinger til en enkelt strøm av elementer.
Syntaks:
Strøm flatMap(Funksjon super T ? extends Stream extends R>> kartlegger)
5. distinkt() : Fjerner dupliserte elementer. Den returnerer en strøm som består av de distinkte elementene (i henhold til Object.equals(Object)).
Syntaks:
Strøm
distinkt() java med swing
6. kikk() : Utfører en handling på hvert element uten å endre strømmen. Den returnerer en strøm som består av elementene i denne strømmen som i tillegg utfører den angitte handlingen på hvert element etter hvert som elementene forbrukes fra den resulterende strømmen.
Syntaks:
Strøm
titt (Forbruker super T>handling)
Java-program som demonstrerer bruken av alle mellomoperasjonene:
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); } }
Produksjon
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE
Forklaring:
- ListOfLists opprettes som en liste som inneholder andre lister med strenger.
- flatMap(Liste::stream): Flater sammen de nestede listene til en enkelt strøm av strenger.
- filter(er -> s.startsWith('S')) : Filtrerer strengene til bare å inkludere de som begynner med 'S'.
- map(String::toUpperCase) : Konverterer hver streng i strømmen til store bokstaver.
- distinkt() : Fjerner eventuelle dupliserte strenger.
- sortert() : Sorterer de resulterende strengene alfabetisk.
- kikk(...): Legger til hvert behandlet element til intermediateResults-settet for mellomliggende inspeksjon.
- collect(Collectors.toList()): Samler de endelig behandlede strengene til en liste kalt resultat.
Programmet skriver ut de mellomliggende resultatene som er lagret i settet for mellomresultater. Til slutt skriver den ut resultatlisten som inneholder de fullstendig behandlede strengene etter alle strømoperasjoner.
Terminaldrift
Terminaloperasjoner er typen operasjoner som returnerer resultatet. Disse operasjonene behandles ikke videre, bare returnerer en endelig resultatverdi.
Viktige terminaloperasjoner
1. samle() : Samlemetoden brukes til å returnere resultatet av mellomoperasjonene utført på strømmen.
Syntaks:
R collect(Collector super T A R>samler)
2. forHver() : ForEach-metoden brukes til å iterere gjennom hvert element i strømmen.
Syntaks:
void forEach(Consumer super T>handling)
3. reduser(): Reduseringsmetoden brukes til å redusere elementene i en strøm til en enkelt verdi. Reduseringsmetoden tar en BinaryOperator som parameter.
Syntaks:
T reduser(T identitet BinaryOperator
akkumulator)
Valgfriredusere(BinaryOperator akkumulator)
4. telle() : Returnerer antallet elementer i strømmen.
Syntaks:
lang telling()
5. findFirst() : Returnerer det første elementet i strømmen hvis det finnes.
Syntaks:
Valgfri
findFirst() js global variabel
6. allMatch() : Sjekker om alle elementene i strømmen samsvarer med et gitt predikat.
Syntaks:
boolsk allMatch(Predikat super T>predikat)
7. Anymatch () : Sjekker om noe element i strømmen samsvarer med et gitt predikat.
Syntaks:
Boolsk Anymatch (Predikat super T>predikat)
Her er ans variabel tildelt 0 som startverdi og i legges til den.
Note: Intermediate Operations kjører basert på konseptet Lazy Evaluation som sikrer at hver metode returnerer en fast verdi (Terminal-operasjon) før du går til neste metode.
Java-program som bruker alle terminaloperasjoner:
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); } }
Produksjon:
ProduksjonForklaring:
- Navnelisten opprettes med eksempelstrenger.
- for hver: Skriver ut hvert navn i listen.
- samle : Filtrerer navn som begynner med 'S' og samler dem inn i en ny liste.
- redusere : Sammenslår alle navn til en enkelt streng.
- telle : Teller totalt antall navn.
- finn først : Finner og skriver ut fornavnet i listen.
- allMatch : Sjekker om alle navn begynner med 'S'.
- uheldig : Sjekker om et navn begynner med 'S'.
Programmet skriver ut navn på hvert navn som starter med 'S' sammenkoblede navn, antall navn, fornavn, enten alle navn starter med 'S' og om et navn begynner med 'S'.
Fordelen med Java Stream
Det er noen fordeler som vi bruker Stream i Java som nevnt nedenfor:
- Ingen lagring
- Pipeline av funksjoner
- Latskap
- Kan være uendelig
- Kan parallelliseres
- Kan opprettes fra samlingsarrayer Filer Linjer Metoder i Stream IntStream etc.
Real-World Use Cases av Java Streams
Strømmer er mye brukt i moderne Java-applikasjoner for:
- Databehandling
- For behandling av JSON/XML-svar
- For databaseoperasjoner
- Samtidig behandling