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ä
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 C 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 C 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ä.
Jos olet Java-ohjelmoija ja olet kiinnostunut oppimaan lisää Java 8 -lamboista, tarkastelemme tässä artikkelissa lambda-syntaksia ja käyttöä tarkemmin.
Lue seuraava
- Ohjelmointi
- Java
- Koodausoppaat

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).
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ä.