Stream introducerades i Java 8 Stream API används för att bearbeta samlingar av objekt. En ström i Java är en sekvens av objekt som stöder olika metoder som kan pipelineras för att ge önskat resultat.
Användning av Stream i Java
Användningen av Stream i Java nämns nedan:
- Stream API är ett sätt att uttrycka och bearbeta samlingar av objekt.
- Gör det möjligt för oss att utföra operationer som filtrering kartläggning reducering och sortering.
Hur man skapar en Java Stream
Skapande av Java Stream är ett av de mest grundläggande stegen innan man överväger funktionerna i Java Stream. Nedan visas syntaxen för att deklarera en Java Stream.
len av sträng i java
Syntax
Strömma
strömma;
Här är T antingen ett klassobjekt eller datatyp beroende på deklarationen.
Java Stream-funktioner
Funktionerna i Java-strömmar nämns nedan:
- En Stream är inte en datastruktur; det tar bara input från Collections Arrays eller I/O-kanaler.
- Strömmar ändrar inte originaldata; de ger bara resultat med hjälp av deras metoder.
- Mellanliggande operationer (som filterkarta etc.) är lata och returnerar en annan Stream så att du kan koppla ihop dem.
- En terminaloperation (som collect forEach count) avslutar strömmen och ger det slutliga resultatet.
Olika operationer på strömmar
Det finns två typer av operationer i strömmar:
- Mellanliggande verksamhet
- Terminaldrift
Mellanliggande verksamhet

Mellanliggande operationer är de typer av operationer där flera metoder är kedjade i rad.
Egenskaper för mellanliggande operationer
- Metoderna är sammankopplade.
- Mellanliggande operationer omvandlar en ström till en annan ström.
- Det möjliggör konceptet med filtrering där en metod filtrerar data och skickar den till en annan metod efter bearbetning.
Viktiga mellanliggande operationer
Det finns några mellanliggande operationer som nämns nedan:
1. map() : Kartmetoden används för att returnera en ström som består av resultaten av att tillämpa den givna funktionen på elementen i denna ström.
Syntax:
Strömma map(Funktion super T ? extends R>kartläggare)
2. filter() : Filtermetoden används för att välja element enligt predikatet som skickas som argument.
Syntax:
Strömma
filter(Predikat super T>predikat)
3. sorterad() : Den sorterade metoden används för att sortera strömmen.
Syntax:
Strömma
sorterad()
Strömmasorterad(Comparator super T>komparator)
4. flatMap(): FlatMap-operationen i Java Streams används för att förenkla en ström av samlingar till en enda ström av element.
Syntax:
Strömma flatMap(Funktion super T ? extends Stream extends R>> kartläggare)
5. distinkt() : Tar bort dubbletter av element. Den returnerar en ström som består av de distinkta elementen (enligt Object.equals(Object)).
Syntax:
Strömma
distinkt()
6. kika() : Utför en åtgärd på varje element utan att ändra strömmen. Den returnerar en ström som består av elementen i denna ström som dessutom utför den angivna åtgärden på varje element när element konsumeras från den resulterande strömmen.
Syntax:
Strömma
kika (Konsument super T>handling)
Java-program som visar användningen av alla mellanliggande operationer:
hur gammal är pete davidsonJava
import 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
Förklaring:
- ListOfLists skapas som en lista som innehåller andra listor med strängar.
- flatMap(List::stream): Plattar ut de kapslade listorna till en enda ström av strängar.
- filter(s -> s.startsWith('S')) : Filtrerar strängarna så att de bara inkluderar de som börjar med 'S'.
- map(String::toUpperCase) : Konverterar varje sträng i flödet till versaler.
- distinkt() : Tar bort alla dubbletter av strängar.
- sorterad() : Sorterar de resulterande strängarna alfabetiskt.
- titt(...): Lägger till varje bearbetat element till intermediateResults set för mellanliggande inspektion.
- collect(Collectors.toList()): Samlar de slutliga bearbetade strängarna till en lista som kallas resultat.
Programmet skriver ut de mellanliggande resultaten som är lagrade i uppsättningen intermediateResults. Slutligen skriver den ut resultatlistan som innehåller de fullständigt bearbetade strängarna efter alla streamoperationer.
Terminaldrift
Terminaloperationer är den typ av operationer som returnerar resultatet. Dessa operationer bearbetas inte vidare, bara returnerar ett slutresultatvärde.
Viktiga terminaloperationer
1. samla() : Insamlingsmetoden används för att returnera resultatet av de mellanliggande operationerna som utförs på strömmen.
Syntax:
R collect(Collector super T A R>samlare)
2. forEach() : Metoden forEach används för att iterera genom varje element i strömmen.
Syntax:
void forEach(Consumer super T>handling)
3. reducera(): Reduceringsmetoden används för att reducera elementen i en ström till ett enda värde. Reduceringsmetoden tar en BinaryOperator som parameter.
Syntax:
T reduce(T identitet BinaryOperator
ackumulator)
Frivilligreduce(BinaryOperator ackumulator)
4. räkna() : Returnerar antalet element i flödet.
Syntax:
lång räkning ()
5. findFirst() : Returnerar det första elementet i strömmen om det finns.
Syntax:
Frivillig
findFirst() sql välj som
6. allMatch() : Kontrollerar om alla element i strömmen matchar ett givet predikat.
Syntax:
boolean allMatch(Predikat super T>predikat)
7. Anymatch () : Kontrollerar om något element i strömmen matchar ett givet predikat.
Syntax:
Boolean Anymatch (Predikat super T>predikat)
Här tilldelas ans variabel 0 som initialvärde och i läggs till den.
Notera: Intermediate Operations körs baserat på konceptet Lazy Evaluation som säkerställer att varje metod returnerar ett fast värde (Terminal operation) innan man går vidare till nästa metod.
Java-program som använder alla 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:
ProduktionFörklaring:
- Namnlistan skapas med exempelsträngar.
- för varje: Skriver ut varje namn i listan.
- samla : Filtrerar namn som börjar med 'S' och samlar dem i en ny lista.
- minska : Sammanfogar alla namn till en enda sträng.
- räkna : Räknar det totala antalet namn.
- hitta först : Hittar och skriver ut förnamnet i listan.
- allMatch : Kontrollerar om alla namn börjar med 'S'.
- olycklig : Kontrollerar om något namn börjar med 'S'.
Programmet skriver ut varje namn namn som börjar med 'S' sammanlänkade namn antalet namn förnamnet oavsett om alla namn börjar med 'S' och om något namn börjar med 'S'.
Fördelen med Java Stream
Det finns några fördelar på grund av vilka vi använder Stream i Java som nämns nedan:
- Ingen lagring
- Pipeline av funktioner
- Lättja
- Kan vara oändligt
- Kan parallelliseras
- Kan skapas från samlingsmatriser Filer Linjer Metoder i Stream IntStream etc.
Verkliga användningsfall av Java-strömmar
Strömmar används ofta i moderna Java-applikationer för:
- Databehandling
- För bearbetning av JSON/XML-svar
- För databasoperationer
- Samtidig bearbetning