Java 8 -virtojen avulla kehittäjät voivat poimia tarkkoja tietoja suuresta kokoelmasta käyttämällä ennalta määritettyjä toimintoja.

Ennen Java 8: n julkaisua termin "virta" käyttäminen Java-ohjelmassa liitettäisiin automaattisesti I / O: han. Java 8 esitteli kuitenkin virran, jota voidaan kutsua joukoksi laskennallisia vaiheita, jotka on ketjutettu toisiinsa, mitä kutsutaan yleisesti "virtajohdoksi".

Tässä artikkelissa esitellään Java 8 -virtoja ja miten ne voivat olla hyödyllisiä projekteissasi.

Mikä on virta?

Stream on Java-käyttöliittymä, joka vie lähteen, suorittaa joukon toimintoja tiettyjen tietojen purkamiseksi ja toimittaa sitten nämä tiedot sovellukseen käytettäväksi. Pohjimmiltaan sen avulla voit poimia erikoistietoja yleistettyjen tietojen kokoelmasta.

Kuinka virrat toimivat

Virtajohto alkaa aina lähteestä. Lähteen tyyppi riippuu käsittelemiesi tietojen tyypistä, mutta kaksi suosituimpia ovat matriisit ja kokoelmat.

Jos haluat muuttaa kokoelman alkuperäiseksi streamiksi, sinun on lisättävä

instagram viewer
virta () lähteelle. Tämä sijoittaa lähteen virtausputkeen, jossa useita eri välitoimia (kuten suodattaa() ja järjestellä()) voi käyttää sitä.

Kun kaikki vaaditut välitoiminnot on suoritettu, voit ottaa käyttöön päätelaitteen (kuten jokaiselle()), joka tuottaa aiemmin puretut tiedot lähteestä.

Elämä ilman virtoja

Java 8 julkaistiin vuonna 2014, mutta ennen sitä Java-kehittäjien täytyi silti poimia erikoistietoja yleisten tietojen kokoelmasta.

Oletetaan, että sinulla on luettelo satunnaisista merkeistä, jotka yhdistetään satunnaislukuihin ainutlaatuisten merkkijonojen arvojen muodostamiseksi, mutta haluat vain arvot, jotka alkavat merkillä “C”, ja haluat järjestää tuloksen nousevasti Tilaus. Näin voit purkaa nämä tiedot ilman virtauksia.

Liittyvät: Mitä sinun on tiedettävä merkkijonojen käytöstä Java-käyttöjärjestelmässä

Arvojen suodatus ja lajittelu ilman virtoja Esimerkki


tuo java.util. ArrayList;
tuo java.util. Taulukot;
tuo java.util. Lista;
julkinen luokka Pää {
public staattinen void main (String [] argumentoi) {
// julistaa ja alustaa taulukko
Lista 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"
);
// ilmoita, että taulukko tallentaa tarvittavat arvot
Lista requiredValues ​​= new ArrayList <> ();
// pura vaaditut arvot ja tallentaa ne reqquiredValues-arvoihin
randomValues.forEach (arvo -> {
if (arvo.startsWith ("C")) {
requiredValues.add (arvo);
}
});
// lajittele vaaditut arvot nousevassa järjestyksessä
requiredValues.sort ((Merkkijonoarvo1, Merkkijonoarvo2) -> arvo1.vertaaTo (arvo2));
// tulosta kukin arvo konsolille
requiredValues.forEach ((Merkkijonoarvo) -> System.out.println (arvo));
}
}

Sinun on myös ilmoitettava ja alustettava matriisiluettelo riippumatta siitä, käytätkö streamia tai muuta purkutapaa. Mitä sinun ei tarvitse tehdä, jos käytät virtoja, on ilmoittaa uusi muuttuja pitämään vaaditut arvot, eikä luoda muita viittä plus-koodiriviä yllä olevassa esimerkissä.

Liittyvät: Kuinka luoda ja suorittaa operaatioita Java-taulukoissa

Yllä oleva koodi tuottaa seuraavan lähdön konsoliin:


C11
C12
C13
C14
C15
C16

Elämä virtojen kanssa

Ohjelmoinnissa tehokkuus tarkoittaa saman tuloksen tuottamista huomattavasti pienemmällä koodilla. Juuri näin virtaputki tekee ohjelmoijalle. Joten seuraavan kerran, kun joku kysyy: "Miksi on tärkeää käyttää suoratoistoja projektissasi?" Yksinkertaisesti sanottuna: "virrat tukevat tehokasta ohjelmointia".

Jatkamalla yllä olevaa esimerkkiä, tällä tavalla virtojen käyttöönotto muuttaa koko ohjelman.

Arvojen suodatus ja lajittelu suoratoistoesimerkillä


tuo java.util. Taulukot;
tuo java.util. Lista;
julkinen luokka Pää {
public staattinen void main (String [] argumentoi) {
// julistaa ja alustaa taulukko
Lista 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"
);
// hakee vain arvot, jotka alkavat kirjaimella C, lajittelevat ne ja tulostavat ne konsolille.
randomValues.stream (). filter (arvo-> arvo.startsWith ("C")). lajiteltu (). forEach (System.out:: println);
}
}

Yllä oleva koodi osoittaa kuinka tehokas virtaliitäntä on. Se ottaa luettelon satunnaisista taulukkoarvoista ja muuntaa sen virraksi käyttämällä virta () toiminto. Virta supistetaan sitten taulukkoluetteloon, joka sisältää vaaditut arvot (mikä on kaikki arvot alkaen C), käyttämällä suodattaa() toiminto.

Kuten yllä olevasta esimerkistä näet, C arvot on järjestetty satunnaisesti taulukkoluetteloon. Jos haluat tulostaa virran tässä vaiheessa putkilinjaa, arvo C15 tulostettaisiin ensin. Siksi järjestellä() toiminto otetaan käyttöön virtajohtoon järjestämään uusi taulukko nousevassa järjestyksessä.

Viimeinen toiminto virtaputkistossa on a jokaiselle() toiminto. Tämä on päätefunktio, jota käytetään virtajohdon pysäyttämiseen ja joka tuottaa seuraavat tulokset konsolissa:


C11
C12
C13
C14
C15
C16

Siellä on laaja luettelo välivaiheista, joita voidaan käyttää virtajohdossa.

Stream-putki alkaa aina yhdestä lähteestä ja a virta () ja päättyy aina yhdellä päätelaitteella (vaikka niitä on useita eri valitse näiden joukosta.) Mutta näiden kahden osan välissä on luettelo kuudesta mahdollisesta välitoiminnosta käyttää.

Yllä olevassa esimerkissämme vain kahta näistä välitoiminnoista käytetäänsuodattaa() ja järjestellä(). Valitsemasi välitoiminto riippuu suoritettavista tehtävistä.

Jos jokin arvoista, jotka alkavat kirjaimella "C" edellä olevassa taulukkorakennelistassamme, olisivat pieniä ja teimme sille saman välitoiminnon, saisimme seuraavan tuloksen.

Suodatus- ja lajittelutoimintojen suorittaminen pienillä arvoilla Esimerkki


tuo java.util. Taulukot;
tuo java.util. Lista;
julkinen luokka Pää {
public staattinen void main (String [] argumentoi) {
// julistaa ja alustaa taulukko
Lista 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"
);
// hakee vain arvot, jotka alkavat kirjaimella C, lajittelevat ne ja tulostavat ne konsolille.
randomValues.stream (). filter (arvo-> arvo.startsWith ("C")). lajiteltu (). forEach (System.out:: println);
}
}

Yllä oleva koodi tuottaa seuraavat arvot konsoliin:


C11
C12
C14
C15

Ainoa ongelma ylläolevassa lähdössä on, että se ei kuvaa kaikkia tarkasti taulukon arvot. Hyvä tapa korjata tämä pieni virhe on ottaa käyttöön toinen välitoiminto virtajohtoon; tämä toimenpide tunnetaan nimellä kartta() toiminto.

Karttatoiminnon esimerkin käyttäminen


tuo java.util. Taulukot;
tuo java.util. Lista;
julkinen luokka Pää {
public staattinen void main (String [] argumentoi) {
// julistaa ja alustaa taulukko
Lista 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"
);
// muuntaa kaikki pienet kirjaimet isoiksi,
// hakee vain arvot, jotka alkavat kirjaimella C, lajittelevat ne ja tulostavat ne konsolille.
randomValues.stream (). map (String:: toUpperCase). filter (arvo-> arvo.startsWith ("C")). lajiteltu (). forEach (System.out:: println);
}
}

kartta() funktio muuttaa objektin tilasta toiseen; yllä olevassa esimerkissä se muuntaa kaikki matriisiluettelon pienet merkit isoksi kirjaimeksi.

Sijoittaminen kartta() -toiminto juuri ennen suodattaa() funktio hakee kaikki arvot, jotka alkavat C taulukosta.

Yllä oleva koodi tuottaa seuraavan tuloksen konsolissa, joka edustaa kaikkia taulukon arvot.


C11
C12
C13
C14
C15
C16

Kolme muuta välitoimintoa, joita voit käyttää sovelluksissasi, ovat:

  • kurkistaa()
  • raja()
  • ohita ()

Java 8 -virrat helpottavat tehokkaan koodin luomista

Java 8 -virtojen avulla voit poimia ylimääräisiä, merkityksellisiä tietoja suuresta lähteestä yhdellä koodirivillä. Niin kauan kuin sisällytät alkuperäisen virta () toiminto ja pääteoperaattori, voit käyttää mitä tahansa yhdistelmää välitoiminnoista, jotka tarjoavat sopivat lähdöt tavoitteellesi.

Jos mietit koodisi riviä, joka on suljettu meidän suodattaa() toiminto; se tunnetaan nimellä "lambda-ilmaisu". Lambda-lausekkeet ovat toinen Java 8: n kanssa käyttöön otettu ominaisuus, ja siinä on paljon nugetteja, joista saatat löytää hyödyllisiä.

Sähköposti
Pika esittely Java 8 Lambdas -sovelluksesta

Jos olet Java-ohjelmoija ja olet kiinnostunut oppimaan lisää Java 8 -lamboista, tarkastelemme tässä artikkelissa lambda-syntaksia ja käyttöä tarkemmin.

Lue seuraava

Liittyvät aiheet
  • Ohjelmointi
  • Java
  • Koodausoppaat
Kirjailijasta
Kadeisha Kean (13 artikkelia julkaistu)

Kadeisha Kean on Full-Stack-ohjelmistokehittäjä ja tekninen / teknologinen kirjoittaja. Hänellä on selkeä kyky yksinkertaistaa joitain monimutkaisimpia teknisiä käsitteitä; tuottaa materiaalia, joka on helposti ymmärrettävissä kaikille tekniikan aloittelijoille. Hän on intohimoisesti kirjoittaminen, mielenkiintoisten ohjelmistojen kehittäminen ja matkustaminen ympäri maailmaa (dokumenttielokuvien kautta).

Lisää artistilta Kadeisha Kean

Tilaa uutiskirjeemme

Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja erikoistarjouksia!

Vielä yksi askel !!!

Vahvista sähköpostiosoitteesi juuri lähettämässäsi sähköpostiviestissä.

.