Java 8-streams giver udviklere mulighed for at udtrække nøjagtige data fra en stor samling ved hjælp af et sæt foruddefinerede operationer.

Før frigivelsen af ​​Java 8 ville brugen af ​​udtrykket "stream" i Java automatisk være forbundet med I / O. Imidlertid introducerede Java 8 en strøm, der kan omtales som et sæt beregningstrin sammenkædet i det, der almindeligvis omtales som en "strømrørledning".

Denne artikel introducerer dig til Java 8-streams og demonstrerer, hvordan de kan være nyttige i dine projekter.

Hvad er en strøm?

En stream er en Java-grænseflade, der tager en kilde, udfører et sæt operationer for at udtrække specifikke data og derefter giver disse data til applikationen til brug. I det væsentlige giver det dig mulighed for at udtrække specialiserede data fra en samling af generaliserede data.

Sådan fungerer streams

En stream-pipeline begynder altid med en kilde. Kildetypen afhænger af typen af ​​data, du har at gøre med, men to af de mere populære er arrays og samlinger.

instagram viewer

For at omdanne samlingen til en indledende strøm skal du tilføje strøm() funktion til kilden. Dette placerer kilden i strømrørledningen, hvor flere forskellige mellemliggende operationer (f.eks filter() og sortere()) kan betjene det.

Når alle de krævede mellemoperationer er udført, kan du indføre en terminaloperation (f.eks for hver()), som producerer de tidligere ekstraherede data fra kilden.

Livet uden vandløb

Java 8 blev udgivet i 2014, men før det var Java-udviklere stadig nødt til at udtrække specialiserede data fra en samling af generelle data.

Lad os sige, at du har en liste over tilfældige tegn, der kombineres med tilfældige tal for at danne unikke strengværdier, men du vil kun have de værdier, der starter med tegnet "C", og du vil arrangere resultatet i stigende bestille. Sådan udtrækker du disse data uden streams.

Relaterede: Hvad du har brug for at vide om brug af strenge i Java

Eksempel på filtrering og sortering af værdier uden streams


importer java.util. ArrayList;
importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
offentlig statisk ugyldig hoved (String [] args) {
// erklære og initialisere arraylisten
Liste randomValues ​​= Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "C13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "C16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// erklære matrixlisten vil gemme de nødvendige værdier
Liste requiredValues ​​= ny ArrayList <> ();
// udpakning af de krævede værdier og lagring af dem i reqquiredValues
randomValues.forEach (værdi -> {
hvis (value.startsWith ("C")) {
requiredValues.add (værdi);
}
});
// sorterer de krævede værdier i stigende rækkefølge
requiredValues.sort ((String værdi1, String værdi2) -> værdi1.compareTo (værdi2));
// udskrive hver værdi til konsollen
requiredValues.forEach ((strengværdi) -> System.out.println (værdi));
}
}

Du bliver også nødt til at erklære og initialisere array-listen, uanset om du bruger streams eller en anden metode til ekstraktion. Hvad du ikke behøver at gøre, hvis du brugte streams, er at erklære en ny variabel til at indeholde de krævede værdier eller oprette de andre fem plus linjer med kode i eksemplet ovenfor.

Relaterede: Sådan oprettes og udføres operationer på arrays i Java

Koden ovenfor producerer følgende output i konsollen:


C11
C12
C13
C14
C15
C16

Livet med vandløb

I programmering taler effektivitet om at producere det samme resultat med betydeligt mindre kode. Dette er præcis, hvad en stream-pipeline gør for en programmør. Så næste gang nogen spørger: "hvorfor er det vigtigt at bruge streams i dit projekt?" Kort sagt: "streams understøtter effektiv programmering."

Fortsat med vores eksempel ovenfor, er det sådan, at introduktion af strømme transformerer hele programmet.

Filtrering og sortering af værdier med et streameksempel


importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
offentlig statisk ugyldig hoved (String [] args) {
// erklære og initialisere arraylisten
Liste randomValues ​​= Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "C13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "C16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// henter kun værdier, der starter med C, sorterer dem og udskriver dem til konsollen.
randomValues.stream (). filter (value-> value.startsWith ("C")). sorteret (). forEach (System.out:: println);
}
}

Koden ovenfor viser, hvor kraftig stream-interface er. Det tager en liste over tilfældige matrixværdier og omdanner den til en stream ved hjælp af strøm() fungere. Strømmen reduceres derefter til en matrixliste, der indeholder de krævede værdier (som er alle de værdier, der starter med C), bruger filter() fungere.

Som du kan se i eksemplet ovenfor, C værdier er tilfældigt arrangeret i matrixlisten. Hvis du skulle udskrive strømmen på dette tidspunkt i rørledningen, værdien C15 udskrives først. Derfor er den sortere() funktion introduceres til strømrørledningen for at omarrangere det nye array i stigende rækkefølge.

Den sidste funktion i strømrørledningen er en for hver() fungere. Dette er en terminalfunktion, der bruges til at stoppe strømrørledningen og producerer følgende resultater i konsollen:


C11
C12
C13
C14
C15
C16

Der er en omfattende liste over mellemliggende operationer, der kan bruges i en stream-pipeline.

En stream-pipeline starter altid med en enkelt kilde og en strøm() funktion og ender altid med en enkelt terminaloperation (selvom der er flere forskellige til vælg fra.) Men imellem disse to sektioner er der en liste over seks mellemliggende handlinger, som du kan brug.

I vores eksempel ovenfor anvendes kun to af disse mellemliggende operationerfilter() og sortere(). Den mellemliggende handling, du vælger, afhænger af de opgaver, du ønsker at udføre.

Hvis nogen af ​​de værdier, der begynder med "C" i vores array-liste ovenfor, var med små bogstaver, og vi udførte de samme mellemliggende operationer på dem, ville vi få følgende resultat.

Udførelse af filter- og sorteringshandlinger på små bogstaver Eksempel


importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
offentlig statisk ugyldig hoved (String [] args) {
// erklære og initialisere arraylisten
Liste randomValues ​​= Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "c13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "c16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// henter kun værdier, der starter med C, sorterer dem og udskriver dem til konsollen.
randomValues.stream (). filter (value-> value.startsWith ("C")). sorteret (). forEach (System.out:: println);
}
}

Koden ovenfor producerer følgende værdier i konsollen:


C11
C12
C14
C15

Det eneste problem med output ovenfor er, at det ikke nøjagtigt repræsenterer alle værdier i vores array-liste. En god måde at løse denne lille fejl på er at introducere endnu en mellemliggende operation til strømrørledningen; denne operation kaldes kort() fungere.

Brug af kortfunktionseksemplet


importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
offentlig statisk ugyldig hoved (String [] args) {
// erklære og initialisere arraylisten
Liste randomValues ​​= Arrays.asList (
"E11", "D12", "A13", "F14", "C15", "A16",
"B11", "B12", "c13", "B14", "B15", "B16",
"F12", "E13", "C11", "C14", "A15", "c16",
"F11", "C12", "D13", "E14", "D15", "D16"
);
// omdanner alle små bogstaver til store bogstaver,
// henter kun værdier, der starter med C, sorterer dem og udskriver dem til konsollen.
randomValues.stream (). map (String:: toUpperCase) .filter (værdi-> value.startsWith ("C")). sorteret (). forEach (System.out:: println);
}
}

Det kort() funktion transformerer et objekt fra en tilstand til en anden; i vores eksempel ovenfor transformerer det alle små bogstaver i matrixlisten til store bogstaver.

Placering af kort() funktion lige før filter() funktionen henter alle de værdier, der begynder med C fra matrixlisten.

Koden ovenfor producerer følgende resultat i konsollen og repræsenterer med succes alle værdier i matrixlisten.


C11
C12
C13
C14
C15
C16

De andre tre mellemliggende operationer, som du kan bruge i dine applikationer, inkluderer:

  • kigge ()
  • begrænse()
  • springe()

Java 8 Streams letter oprettelsen af ​​effektiv kode

Med Java 8-streams kan du udtrække ekstra specifikke, relevante data fra en stor kilde med en kodelinje. Så længe du inkluderer initialen strøm() funktion og en terminaloperatør, kan du bruge enhver kombination af mellemliggende operationer, der giver passende output til dit mål.

Hvis du undrer dig over den kodelinje, der er indeholdt i vores filter() fungere; det er kendt som et "lambda-udtryk." Lambda-udtryk er en anden funktion introduceret med Java 8, og den har mange nuggets, som du måske finder nyttige.

E-mail
En hurtig introduktion til Java 8 Lambdas

Hvis du er en Java-programmør, og du er interesseret i at lære mere om Java 8 lambdas, vil vi i denne artikel se nærmere på lambdasyntaks og -brug.

Læs Næste

Relaterede emner
  • Programmering
  • Java
  • Kodning Tutorials
Om forfatteren
Kadeisha Kean (13 artikler offentliggjort)

Kadeisha Kean er en full-stack softwareudvikler og teknisk / teknologiforfatter. Hun har den tydelige evne til at forenkle nogle af de mest komplekse teknologiske begreber; producerer materiale, der let kan forstås af enhver teknologinevner. Hun brænder for at skrive, udvikle interessant software og rejse verden rundt (gennem dokumentarfilm).

Mere fra Kadeisha Kean

Abonner på vores nyhedsbrev

Deltag i vores nyhedsbrev for tekniske tip, anmeldelser, gratis e-bøger og eksklusive tilbud!

Et trin mere !!!

Bekræft venligst din e-mail-adresse i den e-mail, vi lige har sendt dig.

.