logo

Streama i Java

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ömmaströ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:

  1. Mellanliggande verksamhet
  2. Terminaldrift

Mellanliggande verksamhet

Java Stream Operations' title=



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ömmamap(Funktionkartläggare)

2. filter() : Filtermetoden används för att välja element enligt predikatet som skickas som argument.

Syntax:

Strömmafilter(Predikatpredikat)

3. sorterad() : Den sorterade metoden används för att sortera strömmen.

Syntax:

Strömmasorterad()
Strömmasorterad(Comparatorkomparator)

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ömmaflatMap(Funktion> 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ömmadistinkt()

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ömmakika (Konsumenthandling)

Java-program som visar användningen av alla mellanliggande operationer:

hur gammal är pete davidson
Java
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(Collectorsamlare)

2. forEach() : Metoden forEach används för att iterera genom varje element i strömmen.

Syntax:

void forEach(Consumerhandling)

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 BinaryOperatorackumulator)
Frivilligreduce(BinaryOperatorackumulator)

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:

FrivilligfindFirst()

sql välj som

6. allMatch() : Kontrollerar om alla element i strömmen matchar ett givet predikat.

Syntax:

boolean allMatch(Predikatpredikat)

7. Anymatch () : Kontrollerar om något element i strömmen matchar ett givet predikat.

Syntax:

Boolean Anymatch (Predikatpredikat)

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:

Java
import 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:

StreamsOutput' loading='lazy' title=Produktion

Fö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