Java 8 voogude abil saavad arendajad eelnevalt määratletud toimingute komplekti abil saada täpseid andmeid suurest kogust.

Enne Java 8 väljaandmist seostatakse Java-s termi "voog" kasutamine automaatselt I / O-ga. Kuid Java 8 tutvustas voogu, mida võib nimetada arvutuslike sammude kogumiks, mis on kokku aheldatud selles, mida tavaliselt nimetatakse "voo torujuhtmeks".

See artikkel tutvustab teile Java 8 voogusid ja näitab, kuidas need võivad teie projektides kasulikud olla.

Mis on voog?

Voog on Java-liides, mis võtab allika, viib konkreetsete andmete väljavõtmiseks välja toimingute komplekti ja edastab need andmed seejärel rakendusse kasutamiseks. Põhimõtteliselt võimaldab see teil eraldada spetsialiseeritud andmeid üldistatud andmete kogumist.

Kuidas vooged toimivad

Voolujuhe algab alati allikast. Allika tüüp sõltub teie andmetüübist, millega tegelete, kuid kaks populaarsemat neist on massiivid ja kogumid.

Kollektsiooni esialgseks vooguks teisendamiseks peate lisama voog () funktsioon allikale. See paigutab allika voo torujuhtmesse, kus toimub mitu erinevat vahepealset toimingut (näiteks

instagram viewer
filter () ja sort ()) saab seda opereerida.

Pärast kõigi vajalike vaheoperatsioonide läbiviimist saate tutvustada terminali toimingut (näiteks igaühele()), mis toodab allikast varem eraldatud andmed.

Elu ilma voogudeta

Java 8 ilmus 2014. aastal, kuid enne seda pidid Java-arendajad ikkagi eraldama üldandmete kogust spetsialiseeritud andmeid.

Oletame, et teil on juhuslike märkide loend, mis kombineeritakse juhuslike numbritega ainulaadsete stringi väärtuste moodustamiseks, kuid soovite ainult väärtusi, mis algavad tähega “C”, ja soovite korraldada tulemuse kasvavas järjestuses tellimus. Nii saaksite need andmed ilma voogudeta välja tõmmata.

Seotud: Mida peate teadma stringide kasutamise kohta Javas

Väärtuste filtreerimine ja sortimine ilma voogudeta


import java.util. ArrayList;
import java.util. Massiivid;
import java.util. Nimekiri;
avalik klass Main {
public staatiline void main (String [] args) {
// deklareeri ja initsialiseeri massiivide loendit
Nimekiri 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"
);
// deklareeri, et massiivide loend salvestab vajalikud väärtused
Nimekiri requiredValues ​​= new ArrayList <> ();
// nõutavate väärtuste väljavõtmine ja salvestamine reqquiredValues
randomValues.forEach (väärtus -> {
if (väärtus.startsWith ("C")) {
requiredValues.add (väärtus);
}
});
// sorteerige nõutavadVäärtused kasvavas järjekorras
requiredValues.sort ((Stringi väärtus1, Stringi väärtus2) -> väärtus1.compareTo (väärtus2));
// printige iga väärtus konsooli
requiredValues.forEach ((Stringi väärtus) -> System.out.println (väärtus));
}
}

Samuti peate massiivide loendi deklareerima ja lähtestama, kas kasutate vooge või mõnda muud ekstraktimismeetodit. Voogude kasutamisel pole teil vaja midagi teha, see on deklareerida uus muutuja vajalike väärtuste hoidmiseks ega luua ülaltoodud näites ülejäänud viis pluss koodirida.

Seotud: Kuidas luua ja teha operatsioone massiivid Java

Ülaltoodud kood loob konsoolis järgmise väljundi:


C11
C12
C13
C14
C15
C16

Elu voogudega

Programmeerimisel tähendab efektiivsus sama tulemuse saavutamist oluliselt väiksema koodiga. Täpselt seda teeb voogtorustik programmeerija jaoks. Nii et järgmine kord, kui keegi küsib: "miks on oma projektis oluline kasutada vooge?" Lihtsamalt öeldes: "Voog toetab tõhusat programmeerimist."

Jätkates meie ülaltoodud näitega, muudab voogude tutvustamine kogu programmi nii.

Väärtuste filtreerimine ja sortimine voo näite abil


import java.util. Massiivid;
import java.util. Nimekiri;
avalik klass Main {
public staatiline void main (String [] args) {
// deklareeri ja initsialiseeri massiivide loendit
Nimekiri 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"
);
// otsib ainult väärtused, mis algavad tähega C, sortivad need ja printivad konsooli.
randomValues.stream (). filter (väärtus-> väärtus.startsWith ("C")). sorteeritud (). forEach (System.out:: println);
}
}

Ülaltoodud kood näitab voo liidese võimsust. See võtab juhusliku massiivi väärtuste loendi ja teisendab selle vooga, kasutades voog () funktsioon. Seejärel vähendatakse voog massiivide loendiks, mis sisaldab nõutavaid väärtusi (mis on kõik algavad väärtused) C), kasutades filter () funktsioon.

Nagu näete ülaltoodud näites, on C väärtused on massiivide loendis juhuslikult paigutatud. Kui peaksite voo selles torujuhtme punktis printima, siis väärtus C15 oleks kõigepealt trükitud. Seetõttu on sort () funktsioon lisatakse voo torujuhtmele uue massiivi järjestamiseks kasvavas järjekorras.

Voo torujuhtme viimane funktsioon on a igaühele() funktsioon. See on terminalifunktsioon, mida kasutatakse voo torujuhtme peatamiseks ja mis annab konsoolis järgmised tulemused:


C11
C12
C13
C14
C15
C16

Seal on lai nimekiri vahepealsetest toimingutest, mida saab kasutada voogtorus.

Voolujuhe algab alati ühest allikast ja a voog () funktsioon lõpeb alati ühe terminali toiminguga (kuigi neid on mitu erinevat valige nende hulgast.) Kuid nende kahe jaotise vahel on loetelu kuuest vahepealsest toimingust, mida saate teha kasutamine.

Meie ülaltoodud näites kasutatakse ainult kahte nendest vaheoperatsioonidestfilter () ja sort (). Teie valitud vaheoperatsioon sõltub toimingutest, mida soovite täita.

Kui mõni meie ülaltoodud massiiviloendis tähtedega C algavatest väärtustest oleks väiketäht ja me teeksime nendega samad vahepealsed toimingud, saaksime järgmise tulemuse.

Filtri- ja sortimistoimingute tegemine väiketähtedega Näide


import java.util. Massiivid;
import java.util. Nimekiri;
avalik klass Main {
public staatiline void main (String [] args) {
// deklareeri ja initsialiseeri massiivide loendit
Nimekiri 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"
);
// otsib ainult väärtused, mis algavad tähega C, sortivad need ja printivad konsooli.
randomValues.stream (). filter (väärtus-> väärtus.startsWith ("C")). sorteeritud (). forEach (System.out:: println);
}
}

Ülaltoodud kood loob konsoolis järgmised väärtused:


C11
C12
C14
C15

Ainus probleem ülaltoodud väljundiga on see, et see ei esinda kõiki väärtused meie massiivi loendis. Hea viis selle väikese vea parandamiseks on voo torujuhtmele veel ühe vahepealse toimingu sisseviimine; seda toimingut tuntakse kui kaart () funktsioon.

Kaardifunktsiooni näite kasutamine


import java.util. Massiivid;
import java.util. Nimekiri;
avalik klass Main {
public staatiline void main (String [] args) {
// deklareeri ja initsialiseeri massiivide loendit
Nimekiri 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"
);
// teisendab kõik väiketähed suurtähtedeks,
// otsib ainult väärtused, mis algavad tähega C, sortivad need ja printivad konsooli.
randomValues.stream (). map (String:: toUpperCase) .filter (väärtus-> väärtus.startsWith ("C")). sorteeritud (). forEach (System.out:: println);
}
}

The kaart () funktsioon muudab objekti ühest olekust teise; meie ülaltoodud näites muudab see massiivi loendis kõik väiketähed suurtähtedeks.

Emissioon kaart () funktsioon vahetult enne filter () funktsioon otsib kõik algavad väärtused C massiivide loendist.

Ülaltoodud kood annab konsoolis järgmise tulemuse, mis esindab edukalt kõiki väärtused massiivi loendis.


C11
C12
C13
C14
C15
C16

Kolm ülejäänud vahepealset toimingut, mida saate oma rakendustes kasutada, on järgmised.

  • piiluma ()
  • piir ()
  • vahele jätma()

Java 8 voogud hõlbustavad tõhusa koodi loomist

Java 8 voogude abil saate ühe koodireaga eraldada suurest allikast eriti spetsiifilisi asjakohaseid andmeid. Niikaua kui lisate initsiaal voog () funktsioon ja terminalioperaator, saate kasutada mis tahes kombinatsiooni vaheoperatsioonidest, mis pakuvad teie eesmärgi jaoks sobivaid väljundeid.

Kui soovite teada meie koodirida filter () funktsioon; seda tuntakse kui "lambda väljendit". Lambda-väljendid on veel üks Java 8-ga tutvustatud funktsioon ja sellel on palju tükke, mis võivad teile kasulikud olla.

E-post
Kiire sissejuhatus Java 8 Lambdasse

Kui olete Java programmeerija ja olete huvitatud Java 8 lambdade kohta lisateabe saamisest, vaatleme selles artiklis lambda süntaksit ja kasutamist lähemalt.

Loe edasi

Seotud teemad
  • Programmeerimine
  • Java
  • Kodeerimise õpetused
Autori kohta
Kadeisha Kean (13 artiklit on avaldatud)

Kadeisha Kean on täismahus tarkvaraarendaja ja tehnikakirjutaja. Tal on selge võime lihtsustada mõnda kõige keerukamat tehnoloogilist kontseptsiooni; materjali tootmine, mis on hõlpsasti mõistetav igale tehnoloogia algajale. Ta on kirglik kirjutamise, huvitava tarkvara väljatöötamise ja maailmas ringi liikumise üle (dokumentaalfilmide kaudu).

Veel Kadeisha Keanilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, kus leiate tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!

Veel üks samm !!!

Palun kinnitage oma e-posti aadress e-kirjas, mille teile just saatsime.

.