Java 8-strømmer lar utviklere trekke ut nøyaktige data fra en stor samling ved hjelp av et sett med forhåndsdefinerte operasjoner.

Før utgivelsen av Java 8 vil bruk av begrepet "stream" i Java automatisk bli assosiert med I / O. Imidlertid introduserte Java 8 en strøm som kan refereres til som et sett med beregningstrinn lenket sammen i det som ofte kalles en "strømrørledning".

Denne artikkelen vil introdusere deg for Java 8-strømmer og demonstrere hvordan de kan være nyttige i prosjektene dine.

Hva er en strøm?

En strøm er et Java-grensesnitt som tar en kilde, utfører et sett med operasjoner for å trekke ut spesifikke data, og deretter gir disse dataene til applikasjonen for bruk. I hovedsak lar den deg trekke ut spesialiserte data fra en samling generaliserte data.

Hvordan strømmer fungerer

En strømrørledning begynner alltid med en kilde. Kildetypen er avhengig av hvilken type data du har å gjøre med, men to av de mer populære er matriser og samlinger.

For å transformere samlingen til en første strøm, må du legge til

instagram viewer
strøm() funksjon til kilden. Dette vil plassere kilden i strømrørledningen der flere forskjellige mellomliggende operasjoner (for eksempel filter() og sortere()) kan operere på den.

Etter at alle nødvendige mellomoperasjoner er utført, kan du innføre en terminaloperasjon (for eksempel for hver()), som vil produsere tidligere hentet data fra kilden.

Livet uten strømmer

Java 8 ble utgitt i 2014, men før det trengte Java-utviklere fortsatt å hente ut spesialiserte data fra en samling generelle data.

La oss si at du har en liste over tilfeldige tegn som kombineres med tilfeldige tall for å danne unike strengverdier, men du vil bare ha verdiene som begynner med tegnet "C", og du vil ordne resultatet i stigende grad rekkefølge. Slik vil du trekke ut dataene uten strømmer.

I slekt: Hva du trenger å vite om bruk av strenger i Java

Filtrering og sortering av verdier uten strømmer Eksempel


importer java.util. ArrayList;
importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
public static void main (String [] args) {
// erklære og initialisere matriselisten
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 matriselisten vil lagre nødvendige verdier
Liste requiredValues ​​= new ArrayList <> ();
// trekke ut de nødvendige verdiene og lagre dem i reqquiredValues
randomValues.forEach (verdi -> {
hvis (value.startsWith ("C")) {
requiredValues.add (verdi);
}
});
// sorter de påkrevde verdiene i stigende rekkefølge
requiredValues.sort ((Strengverdi1, Strengverdi2) -> verdi1.forlikTo (verdi2));
// skriv ut hver verdi til konsollen
requiredValues.forEach ((strengverdi) -> System.out.println (verdi));
}
}

Du må også erklære og initialisere matriselisten om du bruker strømmer eller en annen metode for utvinning. Det du ikke trenger å gjøre hvis du bruker strømmer, er å erklære en ny variabel som inneholder de nødvendige verdiene, og heller ikke opprette de andre fem pluss kodelinjene i eksemplet ovenfor.

I slekt: Hvordan lage og utføre operasjoner på arrays i Java

Koden ovenfor gir følgende utdata i konsollen:


C11
C12
C13
C14
C15
C16

Livet med bekker

I programmering snakker effektivitet til å produsere det samme resultatet med betydelig mindre kode. Dette er nøyaktig hva en strømrørledning gjør for en programmerer. Så neste gang noen spør: "hvorfor er det viktig å bruke strømmer i prosjektet ditt?" Enkelt sagt: "strømmer støtter effektiv programmering."

Fortsetter med eksemplet vårt ovenfor, er dette hvordan introduksjon av strømmer forvandler hele programmet.

Filtrering og sortering av verdier med et strømeksempel


importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
public static void main (String [] args) {
// erklære og initialisere matriselisten
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 bare verdier som starter med C, sorterer dem og skriver dem ut til konsollen.
randomValues.stream (). filter (verdi-> value.startsWith ("C")). sortert (). forEach (System.out:: println);
}
}

Koden ovenfor viser hvor kraftig strømgrensesnittet er. Det tar en liste over tilfeldige verdier og forvandler den til en strøm ved hjelp av strøm() funksjon. Strømmen reduseres deretter til en matriseliste som inneholder de nødvendige verdiene (som er alle verdiene som begynner med C), bruker filter() funksjon.

Som du kan se i eksemplet ovenfor, C verdier er tilfeldig ordnet i matrilisten. Hvis du skulle skrive ut strømmen på dette punktet i rørledningen, verdien C15 ville bli skrevet ut først. derfor sortere() funksjonen introduseres til strømrørledningen for å omorganisere den nye matrisen i stigende rekkefølge.

Den siste funksjonen i strømrørledningen er en for hver() funksjon. Dette er en terminalfunksjon som brukes til å stoppe strømrørledningen og produserer følgende resultater i konsollen:


C11
C12
C13
C14
C15
C16

Det er en omfattende liste over mellomliggende operasjoner som kan brukes i en strømrørledning.

En strømrørledning starter alltid med en enkelt kilde og en strøm() funksjon, og ender alltid med en enkelt terminaloperasjon (selv om det er flere forskjellige å velge mellom.) Men mellom disse to seksjonene er en liste over seks mellomliggende operasjoner du kan bruk.

I vårt eksempel ovenfor brukes bare to av disse mellomoperasjonenefilter() og sortere(). Den mellomliggende operasjonen du velger vil avhenge av oppgavene du ønsker å utføre.

Hvis noen av verdiene som begynner med “C” i matriselisten vår, var i små bokstaver, og vi utførte de samme mellomoperasjonene på dem, ville vi få følgende resultat.

Utføre filter- og sorteringsoperasjoner på små verdier Eksempel


importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
public static void main (String [] args) {
// erklære og initialisere matriselisten
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 bare verdier som starter med C, sorterer dem og skriver dem ut til konsollen.
randomValues.stream (). filter (verdi-> value.startsWith ("C")). sortert (). forEach (System.out:: println);
}
}

Koden ovenfor vil gi følgende verdier i konsollen:


C11
C12
C14
C15

Det eneste problemet med utdataene ovenfor er at den ikke representerer nøyaktig alle verdier i vår array-liste. En god måte å fikse denne lille feilen på er å introdusere en annen mellomoperasjon til strømrørledningen; denne operasjonen er kjent som kart() funksjon.

Bruke kartfunksjonseksemplet


importer java.util. Arrays;
importer java.util. Liste;
offentlig klasse Main {
public static void main (String [] args) {
// erklære og initialisere matriselisten
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"
);
// forvandler alle små bokstaver til store bokstaver,
// henter bare verdier som starter med C, sorterer dem og skriver dem ut til konsollen.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}

De kart() funksjon transformerer et objekt fra en tilstand til en annen; i eksempelet vårt over transformerer det alle små bokstaver i matriselisten til store bokstaver.

Plassere kart() funksjon like før filter() funksjon henter alle verdiene som begynner med C fra matriselisten.

Koden ovenfor gir følgende resultat i konsollen, og representerer vellykket alle verdier i matriselisten.


C11
C12
C13
C14
C15
C16

De tre andre mellomliggende operasjonene du kan bruke i programmene dine inkluderer:

  • kikke ()
  • grense()
  • hopp over ()

Java 8 Streams letter etableringen av effektiv kode

Med Java 8-strømmer kan du trekke ut ekstra spesifikke, relevante data fra en stor kilde med en kodelinje. Så lenge du inkluderer initialen strøm() funksjon og en terminaloperatør, kan du bruke en hvilken som helst kombinasjon av mellomoperasjoner som gir passende utganger for målet ditt.

Hvis du lurer på kodelinjen i vår filter() funksjon; det er kjent som et "lambdauttrykk." Lambda-uttrykk er en annen funksjon introdusert med Java 8, og den har mange nuggets som du kan finne nyttige.

E-post
En rask introduksjon til Java 8 Lambdas

Hvis du er en Java-programmerer og er interessert i å lære mer om Java 8 lambdas, vil vi i denne artikkelen se nærmere på lambdasyntaks og bruk.

Les Neste

Relaterte temaer
  • Programmering
  • Java
  • Koding opplæringsprogrammer
Om forfatteren
Kadeisha Kean (13 artikler publisert)

Kadeisha Kean er en full-stack programvareutvikler og teknisk / teknologiforfatter. Hun har den distinkte evnen til å forenkle noen av de mest komplekse teknologiske konseptene; produsere materiale som lett kan forstås av enhver nybegynner. Hun brenner for å skrive, utvikle interessant programvare og reise verden rundt (gjennom dokumentarer).

Mer fra Kadeisha Kean

Abonner på vårt nyhetsbrev

Bli med på nyhetsbrevet vårt for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Ett steg til…!

Bekreft e-postadressen din i e-posten vi nettopp sendte deg.

.